• (二)扩展原理:【1】BeanFactoryPostProcessor


    一、BeanFactoryPostProcessor 接口

      BeanFactoryPostProcessor:BeanFactory 的后置处理器

      作用
        在 BeanFactory 标准初始化之后调用,来定制和修改BeanFactory的内容;
        所有的 bean 定义信息已经保存加载到 beanFactory,但是 bean 的实例还未创建;

    二、案例

      1、自定义 BeanFactoryPostProcessor 实现类:

    @Component
    public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
    
        @Override
        public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
            System.out.println("MyBeanFactoryPostProcessor...postProcessBeanFactory...");
            int count = beanFactory.getBeanDefinitionCount();
            String[] names = beanFactory.getBeanDefinitionNames();
            System.out.println("当前BeanFactory中有"+count+" 个Bean");
            System.out.println(Arrays.asList(names));
        }
    }

      2、创建任意的 Java 类

    public class Blue {
    
        public Blue() {
            System.out.println("Blue constructor");
        }
    }

      3、创建配置类并加入组件

    @ComponentScan(value = {"com.njf.ext", "com.njf.bean"})
    @Configuration
    public class ExtConfig {
    
        @Bean
        public Blue Blue() {
            return new Blue();
        }
    }

      4、测试

        @Test
        public void test01() {
            AnnotationConfigApplicationContext ioc = new AnnotationConfigApplicationContext(ExtConfig.class);
    
            System.out.println("IOC容器创建完毕!");
    
            ioc.close();
        }

      运行结果:

    三、Debug

    四、小结

      BeanFactoryPostProcessor:BeanFactory 的后置处理器

      作用
        在 BeanFactory 标准初始化之后调用,来定制和修改BeanFactory的内容;
        所有的 bean 定义信息已经保存加载到 beanFactory,但是 bean 的实例还未创建

      原理:
        1、ioc容器创建对象
        2、invokeBeanFactoryPostProcessors(beanFactory);
          如何找到所有的 BeanFactoryPostProcessor 并执行他们的方法;
          ① 直接在 BeanFactory 中找到所有类型是 BeanFactoryPostProcessor 的组件,并执行他们的方法;
          ② 在初始化创建其他组件前面执行;


      类似:BeanPostProcessor:bean后置处理器,bean创建对象初始化前后进行拦截工作的

  • 相关阅读:
    DFS——hdu4068
    java 浮点数定点输出
    中国剩余定理——zoj 3538
    Solr4:设计数据结构,就是配置schema.xml
    Solr4:索引的复制
    Solr4:创建索引时的一些建议
    Java:取得当前日期一周之前/之后的日期,或者是一月之前/之后的日期
    Solr4:利用Filter实现两组关键词组合查询
    MyBatis3入门一(简单查询、插入)
    MyBatis3入门二(增加、删除、修改、查询,自增长字段)
  • 原文地址:https://www.cnblogs.com/niujifei/p/15560025.html
Copyright © 2020-2023  润新知