Day 87

_Spring技术–构造器注入

  1. 在实现类中定义参数类型,包括引用类型的参数和基本类型的参数在这里插入图片描述

  2. 在applicationContext.xml文件中配置bean在这里插入图片描述

  3. 在test文件中编写java程序实现构造器注入的试验在这里插入图片描述

  4. package AppTest;
    
    import com.Alvis.service.ConstructorService;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class App_05 {
        public static void main(String[] args) {
            // 获取配置
            ClassPathXmlApplicationContext cpx = new ClassPathXmlApplicationContext("applicationContext.xml");
            // 配置关闭钩子
            cpx.registerShutdownHook();
            ConstructorService constructorService = (ConstructorService) cpx.getBean("constructorService");
            constructorService.run();
        }
    }
    =============================================
    实现类已运行
    init 已执行
    bean 生命周期开启
    bean 生命周期开始
    bean的生命周期已开启
    this is ConstructorService...
    this is BookDao ...
    this is PaperDao...
    name: 小明 age: 90
    bean的生命周期已销毁
    bean 生命周期已销毁
    bean 的生命周期已销毁
    destory 已执行
    
    进程已结束,退出代码0
    
  5. 依赖注入方式选择

    • 强制依赖使用构造器进行,使用setter注入有概率不进行注入导致null对象出现
    • 可选依赖使用setter注入进行,灵活性强
    • Spring框架倡导使用构造器,第三方框架内部大多数采用构造器注入的形式进行数据初始化,这相对严谨
    • 如果有必要可以两者同时使用,使用构造器注入完成强制依赖的注入,使用setter注入完成可选依赖的注入
    • 实际开发过程中还要根据实际情况分析,如果受控对象没有提供setter方法就必须使用构造器注入
    • 自己开发的模块推荐使用setter注入

_Spring技术–自动装配

  1. IoC容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称为自动装配

  2. 自动装配的方式:

    • 按类型(常用)
    • 按名称
    • 按构造方法
  3. 在applicatinContext.xml文件中配置bean,将自动装配可以将之前的property步骤省略掉:在这里插入图片描述

  4. 注意

    • 自动装配用于引用类型的依赖注入,不能对简单类型进行操作
    • 使用按类型装配时(by Type)必须保障容器中相同类型的bean唯一,推荐使用
    • 使用按名称装配时(by Name)必须保障容器中具有指定名称的bean,因变量名与配置耦合,不推荐使用
    • 自动装配优先级低于setter注入与构造器注入,同时出现时自动装配配置失效

_Spring技术集合注入

  1. 不同集合的注入,在xml文件中bean的配置方式会有所不同,具体的方式如下所示:

    • Array集合注入在这里插入图片描述

    • List集合注入在这里插入图片描述

    • Set集合注入在这里插入图片描述

    • Map集合注入在这里插入图片描述

    • Properties集合注入在这里插入图片描述

  2. 具体的实现类程序:

    • package com.Alvis.impl;
      
      import com.Alvis.ArrayDao;
      
      import java.lang.reflect.Array;
      import java.util.List;
      import java.util.Map;
      import java.util.Properties;
      import java.util.Set;
      
      public class ArrayDaoImpl implements ArrayDao {
      
          // 创建bean的生命周期
          public void init() {
              System.out.println("bean 的生命周期已开启");
          }
      
          // 销毁bean的生命周期
          public void destory() {
              System.out.println("bean 的生命周期已销毁");
          }
      
          // 定义所有类型的集合参数
          private int[] array;
          private List<String> list;
          private Map<String,String> map;
          private Set<Integer> set;
          private Properties properties;
      
          // 生成其对应的set方法
          public void setArray(int[] array) {
              this.array = array;
          }
      
          public void setList(List<String> list) {
              this.list = list;
          }
      
          public void setMap(Map<String, String> map) {
              this.map = map;
          }
      
          public void setSet(Set<Integer> set) {
              this.set = set;
          }
      
          public void setProperties(Properties properties) {
              this.properties = properties;
          }
      
          @Override
          public void run() {
              System.out.println("this is ArrayDao...");
      
              // -------------------输出集合---------------------
              System.out.print("Array: ");
              for (int i = 0; i < array.length; i++) {
                  System.out.print(array[i]+" ");
              }
              System.out.println();
              System.out.println("List: "+list);
              System.out.println("Set: " + set);
              System.out.println("Map: " + map);
              System.out.println("Properties: "+properties);
          }
      }
      
  3. 在test文件中编写java程序实现对集合setter注入的调用:

    • package test;
      
      import com.Alvis.ArrayDao;
      import org.springframework.context.support.ClassPathXmlApplicationContext;
      
      public class App_01 {
          public static void main(String[] args) {
              // 获取配置
              ClassPathXmlApplicationContext cpx = new ClassPathXmlApplicationContext("applicationContext.xml");
              ArrayDao arrayDao = (ArrayDao) cpx.getBean("arrayDao");
              arrayDao.run();
      
              // 设置销毁bean的生命周期
              cpx.registerShutdownHook();
      
          }
      }
      ============================================
      bean 的生命周期已开启
      this is ArrayDao...
      Array: 100 200 150 
      List: [小明, 小红, 小蓝]
      Set: [100, 101, 102]
      Map: {中国=北京, 日本=东京, 丑国=华盛顿}
      Properties: {丑国=华盛顿, 中国=北京, 日本=东京}
      bean 的生命周期已销毁
      
      进程已结束,退出代码0
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值