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 (将#修改为@)