作用:用于动态的生成BeanDefinition,因为无论是xml还是注解都是通过配置静态的生成BeanDefinition并且注册到容器中。我们可以通过实现BeanDefinitionRegistryPostProcessor接口来动态的生成、注册Bean。
原理:
- 实现BeanDefinitionRegistryPostProcessor接口,并且注入到容器中;
执行过程:在ApplicationContext的Refresh()方法中,会调用invokeBeanFactoryPostProcessors方法会调用容器中所有实现了BeanDefinitionRegistryPostProcessor接口的类的postProcessBeanDefinitionRegistry方法,在该方法中我们可以动态的创建、注册bean见下面的代码
1
2
3
4
5
6
7
8
9
10
11
12
13
public class RegistryDemo implements BeanDefinitionRegistryPostProcessor {
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {
GenericBeanDefinition definition = new GenericBeanDefinition();
definition.setBeanClass(Demo.class); //设置类
definition.setScope("singleton"); //设置scope
definition.setLazyInit(false); //设置是否懒加载
definition.setAutowireCandidate(true); //设置是否可以被其他对象自动注入
beanDefinitionRegistry.registerBeanDefinition("demo", definition);
}
//省略其他代码
}