zoukankan      html  css  js  c++  java
  • (二)扩展原理:【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创建对象初始化前后进行拦截工作的

  • 相关阅读:
    c++ 文本处理
    c++ 汇编代码看内存分配
    c++ Message与Folder 拷贝 析构(没有动态空间的类)
    c++ StrVec等效vector(string)的类
    c++ istream_iterator ostream_iterator
    c++ 子类与父类之间的类型转换
    android中的空格表示
    ViewPager实现每隔两秒自动切换图片
    有关Android ListView根据项数的大小自动改变高度问题
    Android strings.xml中空格符的标识方法附xml特殊字符表示法
  • 原文地址:https://www.cnblogs.com/niujifei/p/15560025.html
Copyright © 2011-2022 走看看