微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring bean 不是作为单例创建的

如何解决Spring bean 不是作为单例创建的

这是一个使用 Spring 3 的旧项目,带有基于 XML 的 bean 定义,我是公司/项目的新手。

我只是在寻找指点,不一定指望你为我找到根本问题。

基本上,Spring 正在创建同一个类/bean 的多个实例。从 scope=singleton 的 Spring 定义来看,它们表示每个 IoC 容器 的单例,而不是经典 GoF 定义 https://docs.spring.io/spring-framework/docs/3.0.0.RC1/reference/html/ch03s05.html

中的单例

作为一种解决方法,我的同事会明确地向每个 bean 定义添加一个 init 方法(确实需要是一个单例,例如包含缓存的类)

 <bean id="myServiceBean" class="com.supercompany.MyCache" init-method="init"/>

init 方法中,实现了单例模式,因此有效地重用了相同的实例。

只有一个 contextConfiguration 绑定到 applicationContext.xml,我尝试寻找项目“classLoader”和“ApplicationContext”,希望找到多个实现,但无济于事。

  <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>

还有其他可以环顾四周的指针吗?

编辑:

我的 MyCache 示例有点误导。经过更多调查,“正常”类正确地被实例化为单例。这是我的 Service 类没有被正确创建。我正在使用 javax.ws.rs 注释

@Path("/share")
public class ShareService {
...
}

编辑 2:经过更多调查后,这是一个 Javax-ws-rs/JAX-RS“问题”,根据设计,它是每个请求的新实例。但是,即使添加 javax-ws-rs 的 Singleton 仍然不起作用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。