gpt4 book ai didi

java - BeanDefinitionRegistryPostProcessor - 如何将 @Configuration 类注册为 BeanDefinition 并同时注册它的 @Beans

转载 作者:搜寻专家 更新时间:2023-11-01 02:38:08 24 4
gpt4 key购买 nike

假设我有这个@Configuration类:

@Configuration
public class SomeConfig{

@Bean
public MyBean myBean(){
return new MyBean();
}

@Bean
public Another anotherBean(){
return new AnotherBean();
}
}

我有一个实现 BeanDefinitionRegistryPostProcessor 的类来添加特定的 BeanDefinition。在它上面我还想导入 SomeConfig 以便将其 bean 添加到上下文中:

@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
BeanDefinition someConfig= new RootBeanDefinition("x.y.z.SomeConfig");
registry.registerBeanDefinition("someConfig", someConfig);
}

问题是 SomeConfig 的 beans(myBeananotherBean)没有被添加到上下文中。虽然有一个 someConfig bean:

@Autowired
MyBean myBean ---> FAILS

@Autowired
AnotherBean anotherBean ---> FAILS

@Autowired
SomeConfig someConfig ---> OK

最佳答案

这就是为什么它没有导入 @Bean 的原因那是ConfigurationClassPostProcessor在我的后处理器之前执行,因此没有添加新 bean。为了解决它,我实现了 PriorityOrdered :

@Configuration
public class MyFactoryPostProcessor implements BeanDefinitionRegistryPostProcessor, PriorityOrdered{

@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
BeanDefinition someConfig= new RootBeanDefinition("x.y.z.SomeConfig");
registry.registerBeanDefinition("someConfig", someConfig);
}

@Override
public int getOrder() {
return Ordered.HIGHEST_PRECEDENCE;
}
}

同样重要的是后处理器类是@Configuration并且直接在配置中导入,未在另一个中定义@Configuration定义为@Bean 的类:

@Configuration
public class BeanDefinitionFactoryTestConfig {

@Bean
public MyFactoryPostProcessor cc(){
return new MyFactoryPostProcessor ();
}
}

-->> THIS WILL FAIL TO IMPORT THE BEANS<<--

关于java - BeanDefinitionRegistryPostProcessor - 如何将 @Configuration 类注册为 BeanDefinition 并同时注册它的 @Beans,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41442683/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com