如何在线程中注入Spring Bean

16 浏览
0 Comments

如何在线程中注入Spring Bean

我有一个正在运行的Spring 3 web应用程序。所有的bean都被正确注入,一切都按预期工作(所有的Web服务调用都正常工作)。

在扩展应用程序时,我需要添加可以通过Web服务启动和停止的线程。

在线程中,我需要注入一些Spring bean。这些bean是服务(使用@Service注释)。在我的applicationContext中,通过组件扫描检测到这些bean:


    

但是当我尝试在线程中注入这些bean(使用@Resource)时,它们始终为'null'(Spring不注入它们)。线程启动,但在初始化时失败。

我还尝试通过在代码中加载applicationContext来注入它们:(applicationContext位于'src/main/resources')

ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:*applicationContext.xml");
if(applicationContext.containsBean("BeanName")) {
        beanObject = (BeanClass) applicationContext.getBean("BeanName");
} else {
    //Exception
}

有人知道如何在线程中注入这些bean吗?或者在线程中无法注入bean吗?

提前感谢!

0
0 Comments

在使用Spring框架中,如果需要在线程中注入Spring Bean,我们可以将业务逻辑和线程管理的基础设施代码分离开来。我们可以声明一个实现了Runnable接口的Bean来处理我们的业务逻辑,然后在需要启动线程的时候使用它。然而,手动启动线程并不是一个好的实践,更好的做法是使用线程池。实际上,Spring框架提供了一些内置的线程池和异步执行的支持,你可以利用它来解决这个问题。具体使用方法可以参考Spring官方文档中的25. Task Execution and Scheduling章节。

0