我正在尝试构建一个将在后台运行长时间运行的线程的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中找到有关原型范围的更多信息。

09-11 19:17