gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:55:08 26 4
gpt4 key购买 nike

我们正在构建一个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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com