cod*_*ent 6 java spring spring-mvc spring-bean
假设我有这@Configuration门课:
@Configuration
public class SomeConfig{
@Bean
public MyBean myBean(){
return new MyBean();
}
@Bean
public Another anotherBean(){
return new AnotherBean();
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个实现BeanDefinitionRegistryPostProcessor添加某些BeanDefinitions 的类。我还想导入它,SomeConfig以便将其 bean 添加到上下文中:
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
BeanDefinition someConfig= new RootBeanDefinition("x.y.z.SomeConfig");
registry.registerBeanDefinition("someConfig", someConfig);
}
Run Code Online (Sandbox Code Playgroud)
问题是SomeConfig's beans ( myBean, anotherBean) 尚未添加到上下文中。虽然有一个 someConfig bean:
@Autowired
MyBean myBean ---> FAILS
@Autowired
AnotherBean anotherBean ---> FAILS
@Autowired
SomeConfig someConfig ---> OK
Run Code Online (Sandbox Code Playgroud)
它没有导入@Beans 的原因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;
}
}
Run Code Online (Sandbox Code Playgroud)
这也是很重要的是,后处理类@Configuration,并直接在配置进口,在另一个没有定义@Configuration的类与它定义为@Bean:
@Configuration
public class BeanDefinitionFactoryTestConfig {
@Bean
public MyFactoryPostProcessor cc(){
return new MyFactoryPostProcessor ();
}
}
Run Code Online (Sandbox Code Playgroud)
-->> THIS WILL FAIL TO IMPORT THE BEANS<<--
| 归档时间: |
|
| 查看次数: |
6630 次 |
| 最近记录: |