java - Spring:对我的 ThreadFactory 使用 "Lookup method injection"看起来不可扩展

标签 java spring prototype factory

我们正在构建一个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实现ApplicationContextAwareBeanFactoryAware,从而获取应用程序上下文/bean工厂
  • 在您的 createThread(..) 方法中,使用上面获得的上下文/工厂来获取线程 bean 的实例(当然,它应该属于 prototype 范围)

关于java - Spring:对我的 ThreadFactory 使用 "Lookup method injection"看起来不可扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2470783/

相关文章:

java - 如何获取 AWT 组件的像素数据?

java - 由于属性文件位置类型,应用程序或集成测试 Spring 上下文创建失败

java - 版本字段打破了持久层上的 orphanRemoval 行为

java - 为什么在将 Hibernate 5.2.8 与 JasperReports 6.4.0 一起使用时出现 java.lang.NoSuchMethodError

javascript - 在其函数内使用 JavaScript 自定义对象变量

java - Android:如何为我的对象实现 Parcelable?

spring - Apache Tiles 退休了。备择方案?

spring - 如何在使用 Redis session 存储的 Spring Boot 应用程序中获取当前主体

javascript - 使用 JS(原型(prototype)和 Rails 3)更改 hidden_​​field_tag 的值

javascript - Rails 中的 RJS/Javascript 约定