我有一个泽西岛网络服务类,比如说:
@Service
@Path("/serv")
public class Service {
@Autowired
@Qualifier("dao")
Dao dao;
@GET
@Path("/get")
public Response get(@QueryParam("hash") String hash) {
// ...
}
}
现在自动布线工作正常,因为我使用jersey-spring3
,如下所述:
https://jersey.java.net/documentation/latest/spring.html
我在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>
豆子接通了,很酷。 问题是服务类本身似乎并不是由Spring本身管理的。
因此,当我尝试使用@Timed
指标注释来注释JAX-RS服务时,AOP不会拦截该调用。
我可以以某种方式克服这个问题吗?我希望Spring能够&#34;看到&#34;调用服务方法,比如上面示例中的Service::get
。
答案 0 :(得分:1)
如果您正在使用Java配置,则需要从Spring获取服务类以提供给Jersey。类似的东西:
public class JerseyProductConfig extends ResourceConfig {
@Inject
public JerseyProductConfig(ServletContext servletContext) {
WebApplicationContext springFactory = WebApplicationContextUtils.getWebApplicationContext(servletContext);
register(springFactory.getBean(YourResource.class));
}
}
请注意,我在stackoverflow上找到了这个解决方案,但似乎找不到帖子。