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内部如何处理这个?我知道 Spring 正在使用反射。使用单例有什么意义,因为它的行为类似于原型(给我两个三角形对象)。如果范围的概念适用于相同的 id(三角形或三角形 1),则应将其定义为每个弹簧容器每个 id 每个对象每个类加载器每个 jvm,而不是每个弹簧容器单个对象每个类加载器每个 jvm

4

2 回答 2

1

将 bean 定义为单例并不意味着它只是该类的一个实例。单例范围适用于 bean 定义,因此您将有两个三角形类型的单例 bean。

于 2013-04-11T17:26:39.750 回答
0

它将有一个三角形 1 的实例或三角形 2 的另一个实例。

当一个 bean 是单例时,只有一个 bean 的共享实例将被管理,并且所有对 id 或 id 与该 bean 定义匹配的 bean 的请求都将导致 Spring 容器返回一个特定的 bean 实例。

您可以在http://static.springsource.org/spring/docs/3.0.0.M3/reference/html/ch04s04.html#beans-factory-scopes-singleton查看更多信息

于 2013-04-11T17:27:56.117 回答