春天原型豆混淆

时间:2017-05-17 09:06:05

标签: java spring prototype

考虑以下课程:

@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。

我真的不明白为什么,这应该是我所关心的。 如果我错了,请纠正我的错误。

2 个答案:

答案 0 :(得分:0)

是的,这是预期的,因为bean只是按需初始化,对于原型范围,每次需要时都会初始化bean。

答案 1 :(得分:0)

是的,这是预期的!!

因为您将bean的scope属性声明为prototype @Scope(scopeName = "prototype"),所以强制Spring IoC容器在每次发出对该特定bean的请求时都会创建该对象的新bean实例。

注意:通常,对所有state-full bean使用prototype范围,对无状态bean使用singleton范围。