问题描述
这是一个使用 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 (将#修改为@)