我正在使用Jersey 2.6编写REST Web服务。 我在web.xml中提供服务bean(服务的入口点)
<servlet>
<servlet-name>Jersey_REST</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.my.abc.webservices</param-value>
</init-param>
</servlet>
此软件包(com.my.abc.webservices)包含服务bean(Web服务的入口点):
package com.my.abc.webservices;
@Service("caseWebService")
@Path("/CaseService")
public class CaseWebService {
----
}
在spring应用程序上下文中,我想以上述方式向上面的bean添加一个方法拦截器:
<bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames" value="caseWebService" />
<property name="interceptorNames">
<list>
<value>traceInterceptor</value>
</list>
</property>
</bean>
此跟踪拦截器只是日志拦截器,它记录传递给服务方法的参数。
问题:拦截器没有被调用。
但是如果我通过根据需要更改<property name="beanNames" value="myHandler" />
将这些拦截器添加到其他bean中,拦截器就会被调用。
怀疑:是因为&#34; caseWebService&#34;初始化与Jersey有关(我认为Spring仍然会主动初始化这个bean&#34; caseWebService&#34;因为我们在它上面给了@Service,而Jersery只会查找provider包来查找入口bean,如果是这种情况,那么为什么spring无法代理&#34; caseWebService&#34;因此无法添加拦截器)而#34; myHandler&#34; bean由Spring本身初始化。