假设我有这个@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的bean (myBean,anotherBean)还没有添加到上下文中。
@Autowired
MyBean myBean ---> FAILS
@Autowired
AnotherBean anotherBean ---> FAILS
@Autowired
SomeConfig someConfig ---> OK发布于 2017-01-03 12:58:53
它没有导入@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;
}
}后处理器类是重要的,它是直接导入到配置中的,而不是定义为@Bean的另一个@Configuration类:
@Configuration
public class BeanDefinitionFactoryTestConfig {
@Bean
public MyFactoryPostProcessor cc(){
return new MyFactoryPostProcessor ();
}
}-->> THIS WILL FAIL TO IMPORT THE BEANS<<--
https://stackoverflow.com/questions/41442683
复制相似问题