Spring注解驱动知识点简单记录二

一:按条件注册bean之@Conditional

  1. 简介
     此注释使得只有在特定条件满足时才启用一些配置。
  2. 现在我们创建了配置类,并且在配置类里面创建了构建bean对象的方法
     Spring注解驱动知识点简单记录二_第1张图片        
  3. 测试类
      Spring注解驱动知识点简单记录二_第2张图片
  4. 效果:
     Spring注解驱动知识点简单记录二_第3张图片
  5. 实例:现在我们要求根据一定的条件去创建不同名称的bean对象,例如:通过判断当前的操作
               系统类型创建,如果是window系统就创建名称为lisi的person对象,如果是linux系统就创
               建名称为zs的person对象。
     a:创建两个实现了Condition接口的实现类(想要在@Conditional注解中使用下面的类就必须实现Condition接口)
           Spring注解驱动知识点简单记录二_第4张图片
           Spring注解驱动知识点简单记录二_第5张图片
     b:配置类
           Spring注解驱动知识点简单记录二_第6张图片
    c:测试类
          Spring注解驱动知识点简单记录二_第7张图片
    d:效果
         Spring注解驱动知识点简单记录二_第8张图片
  6. 注意:@Conditional这个注解,不仅仅可以标注在方法上,还可以标注在类上,如果
    标注在类上的话就表示,只有满足@Conditional这个注解的条件,这个类中的方法才会
    生效。
    a:现在我们将@Conditional注解放到配置类上,并且使用WindowCondition条件
           Spring注解驱动知识点简单记录二_第9张图片         
           运行测试类效果:
              Spring注解驱动知识点简单记录二_第10张图片   
     b:现在我们将@Conditional注解放到配置类上,并且使用LinuxCondition条件
          Spring注解驱动知识点简单记录二_第11张图片
          运行测试类效果:
          Spring注解驱动知识点简单记录二_第12张图片

二:给容器中快速导入一个组件@Import

  1.  简介
     ⑴给容器中注册组件的两种方式
          a:给自己写的类注册
                包扫描+组件标注注解(@Controller/@Serivce/@Repository/@Component)  
          b:不是我们自己写的类,比如是我们导入的第三方包,在包里面的类没有加上上面的注解
                使用@Import快速的给容器中导入一个组件,容器中就会自动注册这个组件,id默认全
                类名。
  2. 实例:
     a:首先我们创建一个Color类
        Spring注解驱动知识点简单记录二_第13张图片
     b:配置类
         Spring注解驱动知识点简单记录二_第14张图片
     c:测试类
          Spring注解驱动知识点简单记录二_第15张图片
     d:效果
          Spring注解驱动知识点简单记录二_第16张图片
  3. 下面我们使用@Import注解导入Color类
         Spring注解驱动知识点简单记录二_第17张图片
       效果:
          Spring注解驱动知识点简单记录二_第18张图片

三:组件之ImportSelector

  1.  简介
     使用ImportSelector选择器,将会返回需要导入的组件的全类名数组。
  2. 实例
     a:创建两个实体类blue,yellow
                 
          Spring注解驱动知识点简单记录二_第19张图片
      b:创建实现ImportSelector接口的实现类
          Spring注解驱动知识点简单记录二_第20张图片
      c:配置类
          Spring注解驱动知识点简单记录二_第21张图片
      d:测试类
          Spring注解驱动知识点简单记录二_第22张图片
      e:效果
          Spring注解驱动知识点简单记录二_第23张图片
          

四:组件之ImportBeanDefinitionRegistrar

  1. 简介
     可以利用ImportBeanDefinitionRegistrar进行手动注册bean对象到容器中去。
     
  2. 实例
     a:创建实现了ImportBeanDefinitionRegistrar接口的实现类
            Spring注解驱动知识点简单记录二_第24张图片       
      b:配置类
            Spring注解驱动知识点简单记录二_第25张图片  
      c:运行测试类的效果
           Spring注解驱动知识点简单记录二_第26张图片

五:@Bean生命周期之初始化和销毁方法

  1.  简介
     bean的生命周期指的是bean从创建到初始化到销毁的过程。并且bean的生命周期是由
     容器来管理的。
  2. 单实例时候初始化和销毁的例子
     a:创建实体类
          Spring注解驱动知识点简单记录二_第27张图片        
     b:创建配置类(默认单实例)
         Spring注解驱动知识点简单记录二_第28张图片
    c:创建测试类
         Spring注解驱动知识点简单记录二_第29张图片
    d:效果
         Spring注解驱动知识点简单记录二_第30张图片
  3. 那么在多实例的情况下呢?
      a:我们将配置类加上多实例的配置
           Spring注解驱动知识点简单记录二_第31张图片
      b:运行测试类效果
           Spring注解驱动知识点简单记录二_第32张图片
     c:原因
           因为多实例初始化容器的时候是不会创建bean对象的,只有在获取bean实例对象的时候它才会创建
           bean对象,所以我们可以尝试获取我们需要创建的bean对象,就会调用初始化方法了。但是它是不会
           调用销毁的方法的,因为容器不会管理这个多实例的bean的,容器只会帮助创建这个多实例bean,所以
           容器不会调用销毁方法。如果需要销毁就必须手动自己调用。
     d:在测试类中加上获取bean对象的方法
           Spring注解驱动知识点简单记录二_第33张图片
          效果:
               Spring注解驱动知识点简单记录二_第34张图片
  4. 实现初始化和销毁的方法我们还可以通过实体bean实现InitializingBean(初始化接口)和
    DisposableBean(销毁接口)去解决。
    a:创建实体类
         Spring注解驱动知识点简单记录二_第35张图片 
     b:配置类
         Spring注解驱动知识点简单记录二_第36张图片
     c:测试类
         Spring注解驱动知识点简单记录二_第37张图片
     d:效果
         Spring注解驱动知识点简单记录二_第38张图片
  5. 初始化注解PostConstruct和PreDestroy
     a:简介
          @PostConstruct:在bean创建完成并且属性赋值完成之后,再执行初始化方法。
          @PreDestroy:在容器销毁bean之前通知我们进行清理工作
    b:创建实体
          Spring注解驱动知识点简单记录二_第39张图片
    c:配置类
         Spring注解驱动知识点简单记录二_第40张图片
    d:测试类
         Spring注解驱动知识点简单记录二_第41张图片
    e:效果
        Spring注解驱动知识点简单记录二_第42张图片

 

上一篇:Spring注解驱动知识点简单记录一

下一篇:Spring注解驱动知识点简单记录三

文章目录

你可能感兴趣的:(spring)