我正在尝试构建一个将在后台运行长时间运行的线程的Spring Boot应用程序,但是我遇到的问题是我无法在该线程中自动装配Spring bean(至少是我这样做的方式)
我创建了一个可显示我所面临问题的仓库
https://github.com/NikosDim/spring-boot-background-thread
在我的线程的BackgroundThread类中,我希望能够自动装配对象(查找// TODO)
谢谢
缺口
最佳答案
您应该将BackgroundThread
设为prototype bean:
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public BackgroundThread backgroundThreadBean(Dep1 dep1) {
return new BackgroundThread(dep1);
}
然后将
BackgroundThread
注入到BackgroundThreadManager
中:@Autowired
private BackgroundThread thread;
如果需要动态创建
BackgroundThread
的多个实例,则可以使用ObjectFactory
。将工厂注入BackgroundThreadManager
:@Autowired
private ObjectFactory<BackgroundThread> backgroundThreadObjectFactory;
并调用
ObjectFactory.getObject
方法来创建BackgroundThread
的新实例。可以在here中找到有关原型范围的更多信息。