【发布时间】:2014-09-29 16:34:54
【问题描述】:
我正在尝试在 singleton bean 中注入 prototype bean,这样每次对单例 bean 方法的新调用都有一个原型 bean 的新实例。
考虑如下的单例 bean:
@Component
public class SingletonBean {
@Autowired
private PrototypeBean prototypeBean;
public void doSomething() {
prototypeBean.setX(1);
prototypeBean.display();
}
}
我希望每次调用doSomething() 方法时,都会使用一个新的PrototypeBean 实例。
下面是原型bean:
@Component
@Scope(value="prototype", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class PrototypeBean {
Integer x;
void setX(Integer x) {
this.x = x;
}
void display() {
System.out.println(x);
}
}
似乎正在发生的事情是 spring 过于渴望在 doSomething() 方法中移交 PrototypeBean 的新实例。也就是说,doSomething() 方法中的 2 行代码在每一行都创建了一个新的 prototypeBean 实例。
所以在第二行 - prototypeBean.display() 打印 NULL。
此注入的配置中缺少什么?
【问题讨论】:
-
使用代理原型 bean 的用例是什么?
-
@FranciscoSpaeth:我在单例 bean 中有多个使用原型 bean 方法的方法。原型 bean 是有状态的,因此每次调用单例 bean 方法时我都需要获取一个新副本。