用户使用了Spring框架。
https://projects.spring.io/spring-framework/
https://jersey.java.net/documentation/latest/spring.html
这里有一个完整的工作示例:
https://github.com/jersey/jersey/tree/2.22.2/examples/helloworld-spring-webapp
你只需要在Jersey项目中添加这个依赖,它会自动包含Spring:
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-spring3</artifactId>
<version>${project.version}</version>
</dependency>
然后您需要在名为applicationContext.xml和src/main/resources的文件中定义Spring Beans:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="mySingletonService" class="com.test.MyService"/>
<beans/>
最后但并非最不重要的,在您的实际资源中,您可以使用@Autowire注释来注入此单例服务:
@Path("/resource")
@Component
public class MyResource {
@Autowired
private MyService myService;
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getHello() {
return myService.sayHello();
}
}
使用@SingletonResource并在资源内初始化状态是个很糟糕的想法,我认为分离关注点很重要,将状态保留在REST资源中就显得非常糟糕。通过创建LDAPResource和LDAPService来分离处理接口(REST)和业务逻辑的代码。Spring在此处所扮演的角色只是你自己需要实例化的连线工作。