首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用spring来管理bean生命周期而不是泽西

如何用spring来管理bean生命周期而不是泽西
EN

Stack Overflow用户
提问于 2015-04-27 20:45:43
回答 2查看 1.3K关注 0票数 2

我在tomcat 8上使用了运动衫2.17,我认为应该是一个非常简单和常见的用例,我有一个问题。

我在spring文件中定义了各种bean。我现在已经对其中一个进行了注释,以便将一些方法公开为rest。这是一个单例bean,它引用在spring配置中注入的另一个bean。

我的rest正在工作,但问题是每次调用一个bean类的新实例时,我的bean引用都是空的。我的理解是,这是因为jersey正在管理生命周期,而不是spring,我需要SpringComponentProvider,然后它将提供单例。

我在我的应用程序中包含了jersey- spring 3-2.17.jar,并在web.xml中的servlet配置中指定了spring包,如下所示:

代码语言:javascript
复制
    <servlet>
        <servlet-name>Jersey REST Service</servlet-name>
        <servlet-class>
            org.glassfish.jersey.servlet.ServletContainer
        </servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>my.rest.package;org.glassfish.jersey.server.spring</param-value>
        </init-param>
        <init-param>
            <param-name>jersey.config.server.tracing.type</param-name>
            <param-value>ALL</param-value>
        </init-param>        
        <load-on-startup>1</load-on-startup>
    </servlet>

我知道jersey.config.server.provider.packages参数是因为在my.rest.package中找到带注释的类而被选中的,但是SpringComponentProvider显然没有被注册,因为每次我仍然会得到bean的一个新实例。

我尝试像这样显式地指定类:

代码语言:javascript
复制
    <init-param>
            <param-name>jersey.config.server.provider.classnames</param-name>
            <param-value>org.glassfish.jersey.server.spring.SpringComponentProvider</param-value>
    </init-param>

这也没有改变你的行为。

任何洞察力或调试建议都很感激。

更新:我意识到,我的春季罐子的版本是落后于我的球衣罐预期的版本,我认为这就是问题所在。一旦我能够更新spring,如果修复了它,我将关闭它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-07 01:26:28

当我终于能够更新我的春天时,事实证明这不是问题所在。我必须将@Component@Singleton添加到我的资源中,这样泽西才能将它识别为一个弹簧管理的单例。如果我在spring中使用注释,那么这个问题就不会出现;它之所以发生,是因为我使用XML创建spring。

票数 1
EN

Stack Overflow用户

发布于 2015-05-01 19:02:37

泽西将在每个调用上创建一个新实例,而不管在spring上下文中是否具有与singleton相同类的XML:

https://jersey.java.net/documentation/latest/jaxrs-resources.html#d0e2331

还可以看到关于如何更改该行为的响应:

https://stackoverflow.com/a/14739010/2879838

在泽西资源类中,由于您已经添加了jersey-spring依赖项,所以您可以简单地将@Autowire注释添加到您的成员变量上,您说这个注释是在spring通过XML文件注入的。这将在泽西在每个请求上实例化资源时注入依赖项。

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29905624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档