10

我在参考我的问题时问这个问题:

弹簧单例范围

Spring singleton 在参考手册中根据容器 per bean定义。

每个容器意味着如果我们喜欢:

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会出来为真。意味着都指向同一个实例

对于每个 bean每个容器每个 bean的短语部分,我有些困惑。对于每个 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就会出来假。意味着它们是两个不同的实例

4

3 回答 3

6

那是对的。

如果有帮助,您还可以将 Spring bean 视为实例,否则您将使用构造函数在 Java 代码中手动创建它们。

通过在 Spring XML 文件中定义 bean,该 bean(实例)注册到 Spring 的 App Context,然后该实例可以传递到代码的其他区域。

通过创建一个新 bean,您实际上是在创建一个新实例。因此,您可能可以创建任意数量的同一类的 bean(实例)

于 2012-10-16T15:33:37.303 回答
0

myBean 是一个 Spring 单例,因为每次调用 beans.getBean("myBean") 都会返回相同的实例。而具有不同 id 的 mySecondBean 是另一个 Spring 单例。您可以在同一个 ApplicationContext 中拥有同一类的不同单例 bean。

于 2015-08-10T09:50:50.453 回答
-1

你是对的。测试它会告诉你。

于 2012-10-16T15:24:46.610 回答