上节我们学习了Spring 的其中一个拓展BeanFactoryPostProcessor和相关源码的简单的解读过程,本节我们 来学习另外一个拓展功能BeanDefinitionRegistryPostProcessor
BeanDefinitionRegistryPostProcessor
不难发现,BeanDefinitionRegistryPostProcessor是继承BeanFactoryPostProcessor
public interface BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor {
那它的作用很明显了,这里就不在啰嗦,接着我们来看下它的简单使用过程:
简单使用
-1.编写MyBeanDefinitionRegistryPostProcessor类实现BeanDefinitionRegistryPostProcessor接口
@Component
public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {
int count = beanDefinitionRegistry.getBeanDefinitionCount();
System.out.println("MyBeanDefinitionRegistryPostProcessor...postProcessBeanDefinitionRegistry中的bean的个数为:"+count);
//想注册器中注册我们自定义的bean 其中hello为bean的名字
BeanDefinitionBuilder beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(Black.class);
AbstractBeanDefinition definition = beanDefinition.getBeanDefinition();
beanDefinitionRegistry.registerBeanDefinition("hello",definition);
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
int count = configurableListableBeanFactory.getBeanDefinitionCount();
System.out.println("MyBeanDefinitionRegistryPostProcessor...postProcessBeanFactory中的bean的个数为:"+count);
}
上述代码中需要我们注意的一点是注解@Component,其中我们利用#postProcessBeanDefinitionRegistry(...)方法进行自定义bean的注册功能
- 2.编写我们的 配置类
@Configuration
@ComponentScan(value = "com.cacmp.bean.expand")
public class ExpandConfig {
}
- 3.测试类
@Test
public void testExpand(){
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(ExpandConfig.class);
applicationContext.close();
}
- 来看测试结果
会发现我们自己要注册的bean【hello】也会被注册进去,这就是BeanDefinitionRegistryPostProcessor的作用
网友评论