通过读取 springboot 启动模块中的配置来动态注册 bean



我有一个 springboot 启动模块,它正在读取一个配置文件,并使用它尝试构建一个任意类型的新 bean 并将它们添加到 bean 工厂中。

@Configuration
class SomeConfig implements BeanFactoryAware {
BeanFactory beanFactory 
@Autowired
ConfigData configData
@Override
void setBeanFactory(BeanFactory beanFactory) {
this.beanFactory = beanFactory      
}
@PostConstruct
void addMoreBeans() {
ConfigurableBeanFactory configurableBeanFactory = (ConfigurableBeanFactory) beanFactory
configurableBeanFactory.registerSingleton('someObject', new SomeObject())
}   
}

@RestController //( in the application )
class SomeController {
@Autowired
SomeObject someObject // this is null.
}

当我尝试访问 SpringBootApplication 中类型为"SomeObject"的 bean(在控制器 bean 中(时,它使用的是包含上述配置 bean 的启动模块,它不是自动连接的。

我可以看到,它在启动过程的后期初始化了这些豆子,但没有及时初始化自动连线工作。

有没有办法强制启动模块中的 bean 首先初始化。?

addMoreBeans可以在运行setBeanFactory之前运行。

因此,您可以按如下方式编写代码:

@Configuration
class SomeConfig implements BeanFactoryAware {
BeanFactory beanFactory 
@Autowired
ConfigData configData
@Override
void setBeanFactory(BeanFactory beanFactory) {
this.beanFactory = beanFactory
beanFactory.registerSingleton('someObject', new SomeObject()    
}
}

@Bean可能是更好的方法。

@Configuration
class SomeConfig2 {
@Bean
public SomeObject getSomeObject() {
return new SomeObject();
}
}

最新更新