Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java spring单例示波器_Java_Spring - Fatal编程技术网

Java spring单例示波器

Java spring单例示波器,java,spring,Java,Spring,Spring参考手册上说: Spring单例的范围最好描述为“每个容器和每个bean” 考虑以下代码片段: ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml") MyBean myobj=(MyBean)context.getBean("myBean"); //myBean is of singleton scope. MyBean myobj1=(MyBean)context.getBean("

Spring参考手册上说:

Spring单例的范围最好描述为“每个容器和每个bean”

考虑以下代码片段:

ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml")
MyBean myobj=(MyBean)context.getBean("myBean"); //myBean is of singleton scope.
MyBean myobj1=(MyBean)context.getBean("myBean");
每个容器
意味着如果我们执行
context.getBean(“myBean”)
两次返回相同的bean,即
myobj==myobj1
true


但是上面语句中的
每个容器和每个bean中的
每个bean
意味着什么?

SpringBean容器将为单例范围的bean创建单个bean,如果您有另一个Spring容器,则会创建不同的bean

所以每个容器都会有一个bean实例(对于单例范围的bean)

,方法很简单

ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml")
MyBean myobj=(MyBean)context.getBean("myBean"); //myBean is of singleton scope.

ApplicationContext context1= new ClassPathXmlApplicationContext("Beans.xml")
MyBean myobj1=(MyBean)context1.getBean("myBean");

myobj==myobj1 would not be same

关于这个问题,我问了另一个问题:

从这一点出发,我总结了短语
中的
每个bean每个容器的
部分:

考虑:

ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml")
MyBean myobj=(MyBean)context.getBean("myBean"); 
MyBean myobj1=(MyBean)context.getBean("myBean"); 
MyBean myobj2=(MyBean)context.getBean("mySecondBean");
Beans.xml:

<bean id="myBean" class="MyBean"/>
<bean id="mySecondBean" class="MyBean"/>

现在春天的单例是
每个容器每个bean

per container
意味着如果我们在同一个容器中通过
getBean()
获得相同的bean id,那么它们代表相同的实例。因此
myobj==myobj1
是真的

如果我们在两个不同的容器中得到具有相同id的bean,那么它们将代表两个不同的实例

但是对于singleton,在每个容器的
中,它也应该是每个bean的
(每个bean标记)

i、 如果我们在同一类的配置文件中定义了两个bean,那么即使在同一个容器中,它们也表示不同的实例


这就是为什么
myobj==myobj2
为假。

你所说的“myobj==myobj1不一样”是什么意思?这两个都是同一个对象,所以它们是
==
@Tichodroma:实际上,他的意思是myobj==myobj1是假的。@Tichodroma:是的,myobj==myobj1为false意味着myobj和myobj1不是同一个bean,因此请参见同一作者的另一个问题,u已经描述了每个容器
每个容器和每个bean的
部分短语
,即单个bean仍然是每个容器的
单个bean
。但是每个bean的
在短语
每个容器和每个bean的
中表示什么呢?或者我只是混淆了短语的语言。如果您配置了同一个类的2个bean,那么容器中会有2个该类的实例,因为定义了两个bean