美文网首页
Spring扩展功能之BeanDefinitionRegistr

Spring扩展功能之BeanDefinitionRegistr

作者: 会上树的程序猿 | 来源:发表于2020-06-04 14:14 被阅读0次

    上节我们学习了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扩展功能之BeanDefinitionRegistr

          本文链接:https://www.haomeiwen.com/subject/pjcgzhtx.html