1

我正在尝试让 Apache CXF JAX-RS 服务与 Spring AOP 一起使用。我创建了一个简单的日志记录类:

public class AOPLogger {

    public void logBefore(){
        System.out.println("Logging Before!");
    }

}

我的 Spring 配置(beans.xml):

<aop:config>
    <aop:aspect id="aopLogger" ref="test.aop.AOPLogger">
        <aop:before method="logBefore" pointcut="execution(* test.rest.RestService.*(..))"/>
    </aop:aspect>
</aop:config>
<bean id="aopLogger" class="test.aop.AOPLogger"/>

当调用方法 getServletRequest() 时,我总是在 RestService 中得到 NPE,该方法具有:

return messageContext.getHttpServletRequest();

如果我从 beans.xml 中删除 aop 配置或将其注释掉,一切正常。

我所有的实际 Rest 服务都扩展了 test.rest.RestService(这是一个类)并调用 getServletRequest()。我只是想根据 CXF JAX-RS 文档中的示例启动并运行 AOP。我究竟做错了什么?

4

1 回答 1

0

你只需要让你的资源类用一个方法实现一些简单的接口

@Context void setMessageContext(MessageContext mc) {}

这将使 CXF SpringAOPHelper 能够发现该方法

于 2010-06-24T11:40:59.153 回答