代码之家  ›  专栏  ›  技术社区  ›  Michael Bavin

spring:对我的threadfactory使用“lookup method injection”看起来不可伸缩

  •  1
  • Michael Bavin  · 技术社区  · 16 年前

    我们在建一个 ThreadFactory 所以每次单例控制器需要一个新线程时,我都会得到一个新实例。

    看着 Lookup method injection 看起来不错,但是如果我们有多个线程类呢?我喜欢我能自动连接我的线豆。

    像:

    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();
    

    问题 :我不想为每个新的threadClass创建抽象的“create”方法。

    有没有可能使这个将军像:

    threadManager.createThread(ThreadA.class);
    

    我也看了 ServiceLocatorFactoryBean 但是对于多个类,我必须传递bean名称(不是类型安全的)。 谢谢你

    1 回复  |  直到 16 年前
        1
  •  1
  •   Bozho    16 年前

    我不认为有什么办法可以自动做到。如果你不想用 ExecutorService ,如建议所示,如果这对您来说是一个问题,您可以手动完成此任务(但我认为不是)

    • 制作你的 threadManager 实施 ApplicationContextAware 或 BeanFactoryAware ,从而获得应用程序上下文/bean工厂
    • 在你 createThread(..) 方法使用上面获得的上下文/工厂来获取线程be an的实例(它应该属于 prototype 当然)
    推荐文章