每次我调用休息电话时,Spring/Jersey 都会创建新的服务对象

标签 spring rest jersey

每次我进行休息调用 localhost:8080/user/1 时,它都会创建一个新的用户服务对象,而不是使用服务器启动期间创建的对象。我将 Jersey 与 Spring 结合使用。

applicationContext.xml

<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-3.1.xsd 
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.1.xsd"
    default-autowire="byName"
    >

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
 <context:annotation-config/>
<context:component-scan base-package="com.gigenginecore.platform.dataaccess.impl" /> 
    <context:component-scan base-package="com.gigengine.dataaccess"/>
    <context:component-scan base-package="com.gigengine.dataaccess.impl"/> 
    <context:component-scan base-package="com.gigenginecore.platform.service" /> 
    <context:component-scan base-package="com.gigengine.service" />  
    <context:component-scan base-package="com.gigenginecore.provider" />   

</beans>

/////UserService类的代码片段,我什至尝试强制范围为单例。

@Service 
@Scope("singleton") 
@Path("/user")
public class UserService extends AbstractUserService {


///from my web.xml
<servlet>
        <servlet-name>jersey-servlet</servlet-name>
         <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
         <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>   
           <param-value>com.gigengine.service,com.gigenginecore.platform.service, com.gigenginecore.provider</param-value> 
        </init-param> 
        <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
        </init-param> 
        <load-on-startup>1</load-on-startup>
    </servlet> 
    <servlet-mapping>
        <servlet-name>jersey-servlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

///// 所有 DAO 都已正确实例化,并在启动时注入(inject)到用户服务类中,但是当我调用服务端点本身时,它会创建一个新的 UserService 类,其中 DAO 为空。

我需要做些什么来获取启动时创建的那个吗?不知道为什么它在“Spring”单例时创建一个新实例。

有什么建议吗?

最佳答案

使用时使用com.sun.jersey.spi.spring.container.servlet.SpringServlet而不是com.sun.jersey.spi.container.servlet.ServletContainer泽西与 Spring 。请参阅http://jersey.java.net/nonav/apidocs/latest/jersey/contribs/jersey-spring/com/sun/jersey/spi/spring/container/servlet/package-summary.html

关于每次我调用休息电话时,Spring/Jersey 都会创建新的服务对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12867484/

相关文章:

c# - 如何在 C# 中使用 Rest Web 服务

spring - Grails Spring Security REST + LDAP

asynchronous - 启动后台任务的同步 Jersey Rest 服务?

java - 如何从 Jersey 响应中保存文件?

javascript - Spring 模型 setter 中的 AngularJS 日期选择器值

java - Mock beans 与 Mockito 的 Spring Boot 单元测试

hibernate - Grails在同一事务上分页数据库结果?

java - 使用 REST 如何将值绑定(bind)为参数

java - 在 Spring 中将多个存储库 Autowiring 到单个 DAO 中——不好的做法?

java - 使用 DropWizard 对 JAX-RS 端点执行单元测试时无法挂起异步请求的连接