Let's suppose I have this @Configuration class:
@Configuration
public class SomeConfig{
@Bean
public MyBean myBean(){
return new MyBean();
}
@Bean
public Another anotherBean(){
return new AnotherBean();
}
}
I have a class that implements BeanDefinitionRegistryPostProcessor to add certain BeanDefinitions. On it I also would like to import SomeConfig so that its beans are added to the context:
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
BeanDefinition someConfig= new RootBeanDefinition("x.y.z.SomeConfig");
registry.registerBeanDefinition("someConfig", someConfig);
}
The problem is that SomeConfig's beans (myBean, anotherBean) haven't been added to the context. There is a someConfig bean though:
@Autowired
MyBean myBean ---> FAILS
@Autowired
AnotherBean anotherBean ---> FAILS
@Autowired
SomeConfig someConfig ---> OK
There reason why it didn't import the
@Beans was thatConfigurationClassPostProcessorwas executed before my postprocessor so the new beans weren't added. To solve it I implementedPriorityOrdered:It's also important that the postprocessor class is
@Configurationand is imported directly in the config, not defined in another@Configurationclass with it defined as @Bean:-->> THIS WILL FAIL TO IMPORT THE BEANS<<--