如何使Jersey JAX-RS服务成为一个Spring bean本身

时间:2014-05-29 06:19:37

标签: spring web-services jersey jax-rs spring-aop

我有一个泽西岛网络服务类,比如说:

@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

1 个答案:

答案 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上找到了这个解决方案,但似乎找不到帖子。