Spring扩展功能之BeanDefinitionRegistryPostProcessor

上节我们学习了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();
}
  • 来看测试结果
image.png

会发现我们自己要注册的bean【hello】也会被注册进去,这就是BeanDefinitionRegistryPostProcessor的作用

你可能感兴趣的:(Spring扩展功能之BeanDefinitionRegistryPostProcessor)