我想创建一个 Spring Boot 自动配置类(有条件地)创建单个 beanA
。然而,挑战在于,这个 bean 必须在另一个 bean 之前创建B
在 Spring Boot 的默认自动配置类之一中创建。豆子B
不依赖于A
.
我的第一次尝试是使用@AutoConfigureBefore
。这并没有按照我的预期和判断进行这条评论 https://stackoverflow.com/questions/27667516/spring-boot-autoconfiguration-order#comment43752147_27667516作者:Dave Syer 不应该。
一些背景:前面提到的 beanA
改变 Mongo 数据库并且这必须发生在之前MongoTemplate
被建造。
事实证明,我想要的是动态地创建实例B
取决于A
。这可以通过使用来实现BeanFactoryPostProcessor
to 改变bean定义 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-factory-extension-factory-postprocessors of B
beans.
public class DependsOnPostProcessor implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
String[] beanNames = BeanFactoryUtils.beanNamesForTypeIncludingAncestors(
beanFactory, B.class, true, false);
for (String beanName : beanNames) {
BeanDefinition definition = beanFactory.getBeanDefinition(beanName);
definition.setDependsOn(StringUtils.addStringToArray(
definition.getDependsOn(), "beanNameOfB");
}
}
}
这适用于普通 Spring,不需要 Spring Boot。为了完成自动配置,我需要添加 bean 定义DependsOnPostProcessor
到实例化bean的配置类A
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)