如何使Jersey JAX-RS服务本身成为Springbean
我有一个Jersey web服务类,比如:如何使Jersey JAX-RS服务本身成为Springbean,spring,web-services,jersey,jax-rs,spring-aop,Spring,Web Services,Jersey,Jax Rs,Spring Aop,我有一个Jersey web服务类,比如: @Service @Path("/serv") public class Service { @Autowired @Qualifier("dao") Dao dao; @GET @Path("/get") public Response get(@QueryParam("hash") String hash) { // ... } } 现在自动布线可以工作了,因为我使用了
@Service
@Path("/serv")
public class Service {
@Autowired
@Qualifier("dao")
Dao dao;
@GET
@Path("/get")
public Response get(@QueryParam("hash") String hash) {
// ...
}
}
现在自动布线可以工作了,因为我使用了jersey-spring3
,如下所述:
我在web.xml中还有一个常用的Servlet:
<servlet>
<servlet-name>jersey-serlvet</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.test.rest</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
泽西塞尔维特酒店
org.glassfish.jersey.servlet.ServletContainer
jersey.config.server.provider.packages
com.test.rest
1.
豆子都用铁丝扎好了,都凉了。
问题在于服务类本身似乎不是由Spring本身管理的
因此,当我尝试注释JAX-RS服务时,比如使用@Timed
metrics注释,调用不会被AOP截获
我能克服这个问题吗?我希望Spring能够“看到”对服务方法的调用,比如上面示例中的
service::get
。如果您使用Java配置,则需要从Spring获取服务类以提供给Jersey。比如:
public class JerseyProductConfig extends ResourceConfig {
@Inject
public JerseyProductConfig(ServletContext servletContext) {
WebApplicationContext springFactory = WebApplicationContextUtils.getWebApplicationContext(servletContext);
register(springFactory.getBean(YourResource.class));
}
}
请注意,我在stackoverflow的某个地方找到了这个解决方案,但似乎找不到帖子。
服务
由Spring管理。@Timed
不起作用的事实意味着存在一些配置错误。一个可能的原因是您的类路径上没有CGLIB,因此Spring无法为未实现CGLIB的类创建代理interface@geoand但是我确实用@Timed
注释了注入的Dao
,并且该实例是intercept!Dao
是否实现了一个接口?@geo当然不是:-)您有什么类型的Spring配置文件,以及定时配置在哪个文件中?