Spring Boot(四)Spring4扩展分析(二)

1.对容器进行初始化的回调   , BeanFactoryPostProcessor接口

    1. 创建一个类 MyBeanFactoryPostProcessor.java 实现 BeanFactoryPostProcessor接口  ,加 @Component 注解 ,注入到Spring容器
       @Component
       public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

       @Override
       public void postProcessBeanFactory(ConfigurableListableBeanFactory arg0) throws BeansException {
              System.out.println(“—-“+arg0.getBeanDefinitionCount());

       }

       }
    
    2.在 postProcessBeanFactory 方法 进行 对容器进行初始化的回调

    3.在Spring容器 初始化之后 触发 ,而且只执行 一次。
      触发时机 比 BeanPostProcessor 早。

 2.动态地往Spring容器里 注入Bean   , BeanDefinitionRegistryPostProcessor 接口里, 拿到 BeanDefinitionRegistry 对象

    1.创建一个类 MyBeanDefinitionRegistryPostProcessor.java 实现 BeanDefinitionRegistryPostProcessor

    public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {

        @Override
        public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
            // TODO Auto-generated method stub

        }

        @Override
        public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
            // TODO Auto-generated method stub

        }

    }
    
    2.在 postProcessBeanDefinitionRegistry 方法里, 拿到 BeanDefinitionRegistry 对象, 进行 Bean的动态注入
        @Override
        public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
            // 模拟 注入10个User Bean
            for(int i=0;i<10;i++){
                BeanDefinitionBuilder bdb=BeanDefinitionBuilder.rootBeanDefinition(User.class);   // 参数 :Bean的定义是 基于那个对象的 
                bdb.addPropertyValue(“name”, “u”+i);    // 注入属性
                registry.registerBeanDefinition(“User”+i, bdb.getBeanDefinition());  // 参数1:注入的Bean 的名字,名字不能重复;参数2:得到Bean的定义
            }
        }    
    3.在 应用文件App.java 里 显示
    context.getBeansOfType(User.class).values().forEach(System.out::println);

    4.也可以直接在 应用文件App.java 里 ,动态地定义 一个Bean 
    context.registerBeanDefinition(beanName, beanDefinition);

    5.BeanDefinitionRegistryPostProcessor 拿到 ConfigurableListableBeanFactory ,BeanDefinitionRegistry 2个对象。
      BeanDefinitionRegistry 可以动态地注入Bean

    原文作者:Spring Boot
    原文地址: https://blog.csdn.net/lzj470612639/article/details/81463276
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞