Java util:list在scope=";原型;?
如果我使用下面的SpringXML配置,如果我将结果bean分配给多个属性,结果会是什么Java util:list在scope=";原型;?,java,spring,Java,Spring,如果我使用下面的SpringXML配置,如果我将结果bean分配给多个属性,结果会是什么 <util:list id="myBeanId" scope="prototype"> <bean class="com.mypackage.MyTestBeanClass1" /> <bean class="com.mypackage.MyTestBeanClass2" /> </util:list> 在我看来,有两种可能的结果: 创建了多个
<util:list id="myBeanId" scope="prototype">
<bean class="com.mypackage.MyTestBeanClass1" />
<bean class="com.mypackage.MyTestBeanClass2" />
</util:list>
在我看来,有两种可能的结果:
- 创建了多个列表,但其中的bean是共享的(因为它们的作用域默认为singleton)
- 创建多个列表,并为每个列表实例创建每个bean的新副本
<bean id="referencedBean" class="com.mypackage.MyTestBeanClass1" />
<util:list id="myBeanId" scope="prototype">
<ref bean="referencedBean" />
<bean class="com.mypackage.MyTestBeanClass2" />
</util:list>
这似乎提供了额外的可能性:
仍然是一个单实例,但是创建了多个referencedBean
实例MyTestBeanClass2
- 对于创建的列表的每个实例,
和referencedBean
都是重复的(我觉得这不太可能,但仍然是合理的)MyTestBeanClass2
在春季文档中,我似乎找不到任何关于这方面的讨论。事实上,就我所见,文档中甚至没有提到util:list上的scope属性的存在。我错过了,还是这完全没有记录?如果是这样的话,我可以/应该依赖于任何特定的行为吗?的spring文档描述了一种很好的方式来看待它: 当您创建一个bean定义时,您创建了一个菜谱,用于创建由该bean定义定义的类的实际实例。bean定义是一个菜谱的想法很重要,因为这意味着,与类一样,可以从一个菜谱创建多个对象实例 因此,无论您使用
或
定义bean,您仍然只是在创建一个可重用的配方。scope
属性确定配方是否实际被重用
示例
在此示例上下文中,我定义了两个配方:
具有默认的singleton作用域singleBean
原型范围aList
基本上,
util:list
没有什么特别之处。如果您创建了一个具有3个属性的类,并在上面的示例中使用它而不是util:list
,那么结果将是相同的。好问题。我已经多次使用util:list,但不是这样。我认为应该创建多个列表,所有这些列表都将共享bean实例。这正是我直觉上所期望的工作方式,只是我无法真正找到它的确证
<bean id="singleBean" class="org.example.SingleBean" />
<util:list id="aList" scope="prototype">
<value>some string value</value>
<bean class="org.example.TestBean" />
<ref bean="singleBean" />
</util:list>
List<?> list = context.getBean("aList", List.class);
List<?> list2 = context.getBean("aList", List.class);
System.out.println(list);
System.out.println(list2);
System.out.println(list == list2);
[some string value, org.example.TestBean@195198e8, org.example.SingleBean@3c0db454]
[some string value, org.example.TestBean@27ba1599, org.example.SingleBean@3c0db454]
false