Java Spring:使用;查找方法注入“;因为我的ThreadFactory看起来不可伸缩
我们正在构建一个Java Spring:使用;查找方法注入“;因为我的ThreadFactory看起来不可伸缩,java,spring,prototype,factory,Java,Spring,Prototype,Factory,我们正在构建一个ThreadFactory,所以每当一个单例控制器需要一个新线程时,我每次都会得到一个新实例 看起来不错,但是如果我们有多个线程类呢?我喜欢这样的事实,我可以自动连接我的线程 比如: 和配置: <bean id="threadManager" class="bla.ThreadManager" singleton="true"> <lookup-method name="createThreadA" bean="threadA" /> &l
ThreadFactory
,所以每当一个单例控制器需要一个新线程时,我每次都会得到一个新实例
看起来不错,但是如果我们有多个线程类呢?我喜欢这样的事实,我可以自动连接我的线程
比如:
和配置:
<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">
问题:我不想为每个新的threadclass创建一个抽象的“create”方法
是否有可能将此一般性设置为:
threadManager.createThread(ThreadA.class);
我还研究了ServiceLocatoryFactoryBean
,但是对于多个类,我必须传递bean名称(不是类型安全的)。
谢谢你我认为没有办法自动做到这一点。如果您不想像建议的那样使用
ExecutorService
,您可以手动实现,如果这对您来说是一个问题(但我认为不是)
- 使您的
实现threadManager
或ApplicationContextAware
,从而获得应用程序上下文/bean工厂BeanFactoryAware
- 在您的
方法中,使用上面获得的上下文/工厂来获取线程bean的实例(当然应该是范围createThread(..)
)prototype
- 我认为没有办法自动做到这一点。如果您不想像建议的那样使用
ExecutorService
,您可以手动实现,如果这对您来说是一个问题(但我认为不是)
- 使您的
实现threadManager
或ApplicationContextAware
,从而获得应用程序上下文/bean工厂BeanFactoryAware
- 在您的
方法中,使用上面获得的上下文/工厂来获取线程bean的实例(当然应该是范围createThread(..)
)prototype
java.util.concurrent.ExecutorService
是处理异步处理的一种更简单的方法。是的,我看过“TaskExecutor”,但我可能不使用它。遗留代码。不同线程类之间有什么区别?他们运行不同的runnables吗?那么通过runnable不是更容易吗?如果没有,则使用Class@Christopher:是的,runnables有意义,但我们需要isAlive()方法的线程。是的,我喜欢这里的遗留代码…@Michael:我在考虑将Runnable传递给工厂,然后得到一个线程,这个线程在Runnable上工作。那么您就不需要几个线程类了,现代Java应用程序真的没有理由创建自己的线程。java.util.concurrent.ExecutorService
是处理异步处理的一种更简单的方法。是的,我看过“TaskExecutor”,但我可能不使用它。遗留代码。不同线程类之间有什么区别?他们运行不同的runnables吗?那么通过runnable不是更容易吗?如果没有,则使用Class@Christopher:是的,runnables有意义,但我们需要isAlive()方法的线程。是的,我喜欢这里的遗留代码…@Michael:我在考虑将Runnable传递给工厂,然后得到一个线程,这个线程在Runnable上工作。那么您不需要几个线程类谢谢,但这不是我在问题中描述的问题。您希望我不使用IOC并调用getbean()?是的。但无论如何,这就是查找方法实际上正在做的事情。这将只是你的自定义查找方法,这样我也没有类型安全性。我想传递这个类,但是getbean()需要一个bean名。看看其他方法-你可以列出所有bean并得到一个具有适当类的bean。谢谢,但这不是我在问题中描述的问题。你想让我不要使用IOC并调用getbean()?是的。但无论如何,这就是查找方法实际上正在做的事情。这将只是你的自定义查找方法,这样我也没有类型安全性。我想传递这个类,但是getbean()需要一个bean名。看看这里的其他方法——您可以列出所有bean,并获得一个具有适当类的bean。
threadManager.createThreadA();
threadManager.createThread(ThreadA.class);