Spring Boot(三)Spring4扩展分析(一)

1. 将Bean加入到Spring容器里(让Spring 进行管理),有2钟方法

    1.使用 一些指定的注解   @Component  , @Controller , @Service , @Repository 等 
    2.创建一个 配置类 ,在类里 创建一个 返回 想要加载的 Bean  的方法
       1.给配置类加 注解 @Configuration
       2.创建一个 返回 User.class  Bean的方法
       3.给 该方法 加注解 @Bean
        @Configuration
    public class MyConfig {
        @Bean
        public User getUsre(){
          return new User();
        }
    }
      

 2. 获取 Bean    

    1.通过类名 获取
       1. 通过 类.class
      AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(“com.aa.b”); 
          context.getBean(User.class)  

       2. 通过 类的名称 获取   ,如  获取 User.class
          1.AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(“com.aa.b”);  
        context.getBean(“user”)  
          2. 类的名称要小写
    2.通过 配置类中 方法的名称 ,来获取
    3.通过类型  获得Bean 时
       1. Spring容器里 只有 一个该类型的Bean
          可以用  context.getBean(User.class)  来获得
       2. Spring容器里 只有 多个该类型的Bean
          只能用  context.getBeansOfType(User.class)  来获得,否则 报错

 3. 将 ApplicationContext 注入  有3种方法

    1.直接用 @Autowired 或 @Resource  或 @Inject 来注解 
       1.在一个Bean类里, 添加 ApplicationContext 属性
       2.用 @Autowired 或 @Resource  或 @Inject 来注解 ApplicationContext 属性 
    2.实现 ApplicationContextAware 
       1.让一个 Bean类 实现 ApplicationContextAware 接口
       2.在这个Bean类里 添加 ApplicationContext 属性
       3.在重写 方法 setApplicationContext 中 加 this.applicationContext=applicationContext

       private ApplicationContext applicationContext;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext=applicationContext;
        
    }
    3.通过构造方法
       1.在一个Bean类里, 添加 ApplicationContext 属性
       2.构建 该Bean的带 ApplicationContext 参数 的构造函数,在构造函数 中加 this.pplicationContext=applicationContext
          private ApplicationContext applicationContext;
      public Bank(ApplicationContext applicationContext){
        this.pplicationContext=applicationContext;
      }
    —–
       3.Spring4.3新特性
          1.构造函数只能有一个,如果有多个,则必须有一个无参的构造函数.此时,Spring会调用无参的构造函数
          2.构造函数的参数,都必须都要Spring容器里

 4. 实现 BeanPostProcessor 接口  ,Bean的后置处理器   –对指定的Bean做一些处理,比如返回该对象的代理对象

    1.创建一个新的类 ,实现 BeanPostProcessor 接口
    2.在该类里 重写 2个方法 postProcessBeforeInitialization() ,postProcessAfterInitialization()
       1.postProcessBeforeInitialization 
          1.方法, 是在 Bean依赖装配(属性设置完)完成之后触发
          2.这里可以对指定的Bean做一些处理,比如返回该对象的代理对象
       2.postProcessAfterInitialization 方法,  是在bean init方法执行之后触发的

 5. 将 ApplicationContext 注入 第2种方法中实现的原理

    1.在一个类中 实现一个Spring 特定的接口 BeanPostProcessor  ,来对 ApplicationContext 做一些处理
    2.执行BeanPostProcessor 接口 中的 postProcessBeforeInitialization()方法。 
    3. postProcessBeforeInitialization(Object bean,String beanName)方法,中加一个if判断
       1.
         private Object  postProcessBeforeInitialization(Object bean,String beanName){
           if(bean instanceof User){
            return new ApplicationContext();
        }
         }
       2. ApplicationContext 是User Bean中的属性 。Spring容器刚 注入 User Bean 后,
          将 执行 postProcessBeforeInitialization(),在该方法里 返回一个新创建的ApplicationContext 也就是将ApplicationContext注入Spring容器。

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