就像其他人提到的那样,应该从您发布的代码中创建两个 bean。单例定义如下(来自 Spring 文档:Singleton Scope)
只有一个单例 bean 的共享实例被管理,并且所有对具有与该 bean 定义匹配的一个或多个 id 的 bean 的请求都会导致 Spring 容器返回一个特定的 bean 实例。
为了更清楚地说明这一点,“共享实例”背后的含义在上一段后面的段落中进行了解释:
该命名 bean 的所有后续请求和引用都返回缓存的对象
创建单例 bean 时,仅实例化和缓存一个 bean 对象。这仅指 bean,而不是 bean 可能是实例的任何类。例如,
<bean id="myBean" class="myPackage.myClass" />
<bean id="myOtherBean1 class="myPackage.myOtherClass1">
<property name="beanReference1" ref="myBean" />
</bean>
<bean id="myOtherBean2 class="myPackage.myOtherClass2">
<property name="beanReference2" ref="myBean" />
</bean>
在这个组成的配置中,“myOtherBean1”和“myOtherBean2”引用了相同的“myBean”bean,因此具有相同的“myPackage.myClass”实例。如果您更改代码以添加第二个“myPackage.myClass”bean,它将与“myBean”不同。
要完全理解这一点,还请参考另一个 Spring 范围:原型。来自Prototype Scope的 Spring 文档:
bean 部署的非单例原型范围导致每次对特定 bean 发出请求时都会创建一个新的 bean 实例。
这意味着如果我们要使用与上面相同的 Spring XML,“myOtherBean1”和“myOtherBean2”将各自收到它们自己不同的“myBean”副本,它仍然只是“myPackage.myClass”的一个实例。