我们正在构建一个ThreadFactory
,因此每次单例 Controller 需要一个新线程时,我每次都会得到一个新实例。
查看Lookup method injection看起来不错,但是如果我们有多个线程类怎么办?我喜欢这样一个事实:我可以 Autowiring 我的 threadBeans。
喜欢:
public abstract class ThreadManager {
public abstract Thread createThreadA();
public abstract Thread createThreadB();
}
和配置:
<bean id="threadManager" class="bla.ThreadManager" singleton="true">
<lookup-method name="createThreadA" bean="threadA" />
<lookup-method name="createThreadB" bean="threadB"/>
</bean>
<!-- Yes! i can autowire now :)-->
<bean id="threadA" class="bla.ThreadA" singleton="false" autowire="byType">
<bean id="threadB" class="bla.ThreadB" singleton="false" autowire="byType">
和用法:
threadManager.createThreadA();
问题:我不想为每个新线程类创建一个抽象的“创建”方法。
是否可以使这个泛型像:
threadManager.createThread(ThreadA.class);
我还查看了 ServiceLocatorFactoryBean
但对于多个类,我必须传递 bean 名称(类型不安全)。
谢谢
最佳答案
我认为没有办法自动做到这一点。如果您不想使用 ExecutorService
,按照建议,您可以手动实现此目的,如果这对您来说是一个问题(但我不认为是这样)
- 使您的
threadManager
实现ApplicationContextAware
或BeanFactoryAware
,从而获取应用程序上下文/bean工厂 - 在您的
createThread(..)
方法中,使用上面获得的上下文/工厂来获取线程 bean 的实例(当然,它应该属于prototype
范围)
关于java - Spring:对我的 ThreadFactory 使用 "Lookup method injection"看起来不可扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2470783/