We're building a ThreadFactory
so everytime a singleton controller needs a new thread, i get a new instance everytime.
Looking at Lookup method injection looks good but what if we have multiple thread classes? I like the fact that i can autowire my threadBeans.
like:
public abstract class ThreadManager {
public abstract Thread createThreadA();
public abstract Thread createThreadB();
}
and config:
<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">
and usage:
threadManager.createThreadA();
Question: I don't want to create an abstract "create" method for every new threadclass.
Is it possible to make this ge开发者_如何学JAVAnerich like:
threadManager.createThread(ThreadA.class);
I also looked at ServiceLocatorFactoryBean
but for multiple classes i have to pass the bean name (not type safe).
Thank you
I don't think there is a way to do that automatically. And if you don't want to use ExecutorService
, as suggested, you you can achieve this manually, if it is such a problem for you (but I don't think it is)
- make your
threadManager
implementApplicationContextAware
orBeanFactoryAware
, thus obtaining the application context / bean factory - in your
createThread(..)
method use the context/factory obtained above to get an instance of the thread bean (which should be of scopeprototype
of course)
精彩评论