我有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
- classB
和threadPoolFactory
。
在MyClassA
中,调用MyClassA.threadPoolFactory.getThreadPool()
会返回ThreadPoolExecutor
类型的新对象,该对象已分配给成员变量MyClassA
。
我的问题是,如果从该方法返回一个新实例,如何向MyClassB
提供ThreadPoolExecutor
的同一个实例的引用?这是我可以通过bean配置做的事情,还是我被迫向MyClassB
添加一个setter方法?我问,因为MyClassB
应该总是有一个非空ThreadPoolExecutor
(由MyClassA
引用的同一个实例),所以它应该通过构造函数传递。
答案 0 :(得分:0)
由于bean的默认范围是singleton。您可以使用setter或构造函数注入来引用ClassB中的线程池。因此,在您的情况下,以下配置就足够了。
<bean id="classB" class="com.petehallw.test.MyClassB">
<constructor-arg name="threadPoolFactory" ref="threadPoolFactory"/>
</beans>