考虑以下课程:
@Component
@Scope(scopeName = "prototype", proxyMode = ScopedProxyMode.TARGET_CLASS)
class PrototypeBean
{
public void method1() { ... };
public void method2() { ... };
}
@Component
public class SingletonBean
{
@Autowired
private PrototypeBean prototypeBean;
public void SingletonBean doSomething()
{
prototypeBean.method1();
prototypeBean.method2();
}
}
现在,我希望每次调用doSomething()方法时,都会创建一个新的PrototypeBean实例并将其注入SingletonBean。 但实际发生的是当我调用method1()和method2()时,会创建一个新的PrototypeBean实例并将其注入SingletonBean。
我真的不明白为什么,这应该是我所关心的。 如果我错了,请纠正我的错误。
答案 0 :(得分:0)
是的,这是预期的,因为bean只是按需初始化,对于原型范围,每次需要时都会初始化bean。
答案 1 :(得分:0)
是的,这是预期的!!
因为您将bean的scope属性声明为prototype
@Scope(scopeName = "prototype")
,所以强制Spring IoC容器在每次发出对该特定bean的请求时都会创建该对象的新bean实例。
注意:通常,对所有state-full bean使用prototype范围,对无状态bean使用singleton范围。