Spring bean依赖于同一个对象实例

时间:2018-05-27 17:35:11

标签: java spring dependency-injection spring-bean

我有3个bean,用XML配置如下。

<bean id="classA" class="com.petehallw.test.MyClassA">
    <constructor-arg name="threadPoolFactory" ref="threadPoolFactory"/>
    <constructor-arg name="classB" ref="classB"/>
</bean>

<bean id="classB" class="com.petehallw.test.MyClassB"/>

<bean id="threadPoolFactory" class="come.petehallw.test.MyThreadPoolFactory"/>

您可以看到两个依赖项被注入MyClassA - classBthreadPoolFactory

MyClassA中,调用MyClassA.threadPoolFactory.getThreadPool()会返回ThreadPoolExecutor类型的新对象,该对象已分配给成员变量MyClassA

我的问题是,如果从该方法返回一个新实例,如何向MyClassB提供ThreadPoolExecutor的同一个实例的引用?这是我可以通过bean配置做的事情,还是我被迫向MyClassB添加一个setter方法?我问,因为MyClassB应该总是有一个非空ThreadPoolExecutor(由MyClassA引用的同一个实例),所以它应该通过构造函数传递。

1 个答案:

答案 0 :(得分:0)

由于bean的默认范围是singleton。您可以使用setter或构造函数注入来引用ClassB中的线程池。因此,在您的情况下,以下配置就足够了。

<bean id="classB" class="com.petehallw.test.MyClassB">
    <constructor-arg name="threadPoolFactory" ref="threadPoolFactory"/>
</beans>