2013-04-11 76 views
1

在下面的例子中,我不是作为非常清楚发生了什么春范围为单工作

<bean id="triangle" class="com.mkyong.Triangle" scope="singleton"> 
<property name ="pt1" ref ="point1" /> 
<property name ="pt2" ref ="point2"/> 
<property name ="pt3" ref ="point3"/> 
</bean> 

<bean id="triangle1" class="com.mkyong.Triangle" scope="singleton"> 
<property name ="pt1" ref ="point1" /> 
<property name ="pt2" ref ="point2"/> 
<property name ="pt3" ref ="point3"/> 
</bean> 

我看到三角对象的两个实例。 Spring如何处理这个问题? 我知道春天正在使用反射。使用singleton的意义在于它的行为如同原型(给我两个Triangle对象)。如果范围的概念在于同一个id(三角形或三角形1),那么它应该被定义为每个spring容器每个classloader每个jvm的单个对象,而不是每个spring的单个对象每个jvm的每个classloader容器

回答

1

定义bean作为单例并不意味着它只会是该类的一个实例。单例作用域适用于bean定义,所以你将有两个三角形单体bean。

+0

查看更多的信息,以便在Spring的情况下独居它是每个春天配置文件中每个JVM定义每spring容器的id单个对象。 – user2271410 2013-04-11 17:35:22

+0

看起来像Spring内部使用Map作为ID和Object作为值?对于不同的ID我得到不同的物体。 – user2271410 2013-04-11 17:37:37

+0

是的,每个bean定义pr应用程序上下文的单例。 – NilsH 2013-04-11 17:43:19