我问这个问题是针对我的问题:
Spring 单例在引用手册中被定义为per container per bean。
per container 表示如果我们喜欢:
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml")
MyBean myobj=(MyBean)context.getBean("myBean"); //myBean is of singleton scope.
MyBean myobj1=(MyBean)context.getBean("myBean");
Beans.xml:
<bean id="myBean" class="MyBean"/>
然后 myobj==myobj1
将变为 true。意味着两者都指向相同的实例。
对于短语per container per bean 的per bean 部分,我有些困惑。我对 per bean 的关注是否正确:
如果我们喜欢
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml")
MyBean myobj=(MyBean)context.getBean("myBean");
MyBean myobj1=(MyBean)context.getBean("mySecondBean");
Beans.xml:
<bean id="myBean" class="MyBean"/>
<bean id="mySecondBean" class="MyBean"/>
那么 myobj==myobj1
就会出来 false。意思是它们是两个不同的实例?
最佳答案
没错。
如果有帮助,您还可以将 Spring bean 视为您本来可以使用构造函数在 Java 代码中手动创建的实例。
通过在 Spring XML 文件中定义 bean,该 bean(实例)注册到 Spring 的 App Context,然后该实例可以传递到代码的其他区域。
通过创建一个新 bean,您实际上是在创建一个新实例。因此,您可能会创建同一类的任意数量的 bean(实例)
关于java - spring 单例作用域——每个容器每个 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12918066/