Spring Boot自动配置顺序
我想创建一个Spring Boot" title="Spring Boot">Spring Boot自动配置类(有条件地)创建一个bean A
。然而,挑战在于,必须在B
SpringBoot的默认自动配置类之一中创建另一个bean之前创建该对象。Bean B
不依赖A
。
我的第一次尝试是使用@AutoConfigureBefore
。根据我的预期,这种方法不起作用,从DaveSyer的评论来看,它不应该如此。
背景知识:上述bean A
更改了Mongo数据库,并且必须在MongoTemplate
创建之前进行。
回答:
事实证明,我想要的是动态地使实例B
依赖A
。这可以通过使用来实现BeanFactoryPostProcessor
,以改变bean定义的B
豆类。
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
。
以上是 Spring Boot自动配置顺序 的全部内容, 来源链接: utcz.com/qa/414791.html