How to use Jersey 2 with Spring IoC container

前端 未结 3 1273
遇见更好的自我
遇见更好的自我 2020-12-28 19:37

What is the best way to enable injection of spring beans into Jersey 2? Jersey seems to not support this natively.

What is needed to wire the 2 frameworks together?

相关标签:
3条回答
  • 2020-12-28 20:14

    As of June 2013, Jersey 2.0 has no official Spring support. There are two options:

    1. Use third party code from here https://github.com/marko-asplund/jersey/tree/master/ext/jersey-spring
    2. Wait until HK2 spring bridge becomes stable and documented https://java.net/jira/browse/HK2-40

    See also:

    http://jersey.576304.n2.nabble.com/Spring-framework-support-for-Jersey-2-td7580673.html

    EDIT: Jersey 2.3 has spring support now, see the answer by Fabio below

    0 讨论(0)
  • 2020-12-28 20:16

    You should be able to annotate jersey components and then use annotations to inject the beans.

    @Service //(or @Component)
    public class MyJerseyService {
    
        @Autowired
        private MyObj mySpringBean
    
    }
    
    0 讨论(0)
  • 2020-12-28 20:27

    Jersey 2.3 has now spring support:

    https://jersey.github.io/documentation/latest/user-guide.html#spring

    As stated in the documentation

    The Spring extension module configuration is based on annotations

    So you have to tell spring to scan your classpath, for example:

    <context:component-scan base-package="my.package.to.resources">
    

    and annotate your resource class with a spring annotation (I advise to use @Component, and then specify the jersey resource scopes @Singleton/@PerLookup/@RequestScoped )

    @Component
    @Singleton
    @Path("example")
    public class Example {
    
        //Spring beans can't be injected directly into JAX-RS classes by using Spring XML configuration
        @Autowired
        private MyOtherBean myOtherBean;
    
        @GET @Path("hello")
        public String hello() {
            return myOtherBean.hello();
        }
    }
    
    0 讨论(0)
提交回复
热议问题