构造器注入:通过构造方法注入就相当于给构造方法的参数传值,构造注入的优势是通过构造强制依赖关系,使得实例化出的bean对象一定是完整的或者可以使用的。

Salary类

public class Salary {private BigDecimal money;private int day;public Salary(){}public Salary(BigDecimal money, int day) {this.money = money;this.day = day;}@Overridepublic String toString() {return "Salary{money = " + money + ", day = " + day + "}";}
}

Employee类

public class Employee {private String name;private int age;private Salary salary;public Employee(){}public Employee(String canshu1, int canshu2, Salary canshu3) {   //注意参数this.name = canshu1;this.age = canshu2;this.salary = canshu3;}@Overridepublic String toString() {return "Employee{name = " + name + ", age = " + age + ", salary = " + salary + "}";}
}

1. 根据参数类型传值

<bean name="salary" class="com.pojo.Salary"><constructor-arg type="int" value="20"/><constructor-arg type="java.math.BigDecimal" value="20000.0564"/></bean><bean name="employee" class="com.pojo.Employee"><constructor-arg type="java.lang.String" value="员工"/><constructor-arg type="int" value="25"/><constructor-arg type="com.pojo.Salary" ref="salary"/>
</bean>

type表示参数的类型:

  1. 对于引用类型的变量需要写全类型限定名,即 包名 + 类名。

  2. 对于基本数据类型直接写类型即可。

  3. 这种方式使用时最好是根据构造器的参数顺序写、当出现很多同类型的字段时,都容易出错。不推荐使用

2. 根据参数列表的索引index传值

<bean name="salary" class="com.pojo.Salary"><constructor-arg index="1" value="20"/><constructor-arg index="0" value="15611.0564"/></bean><bean name="employee" class="com.pojo.Employee"><constructor-arg index="0" value="员工"/><constructor-arg index="1" value="25"/><constructor-arg index="2" ref="salary"/>
</bean>

index为构造器参数列表的索引

  1. 索引从0开始,到n - 1。

  2. 注入参数值的顺序可以颠倒,只要index没写错就行。

3. 通过参数名注入

<bean name="salary" class="com.pojo.Salary"><constructor-arg name="day" value="24"/><constructor-arg name="money" value="20000"/>
</bean><bean name="employee" class="com.pojo.Employee"><constructor-arg name="canshu1" value="员工"/><constructor-arg name="canshu2" value="25"/><constructor-arg name="canshu3" ref="salary"/>
</bean>

name为参数列表的参数名,不是字段名!

  1. 根据参数的名字传值,注意是参数名,不是字段名。

  2. 比较实用,一些编译器都会自动提示。

Spring构造器的三种注入方式相关推荐

  1. spring入门之Spring 常用的三种注入方式

    Spring 常用的三种注入方式 Spring 通过 DI(依赖注入)实现 IOC(控制反转),常用的注入方式主要有三种:构造方法注入,set 方法注入,基于注解的注入. 一.通过构造方法注入 先简单 ...

  2. Spring bean的三种注入方式

    Spring的一个重要原理就是IOC(Inverse Of Control),即控制反转.IOC就是一种将组件依赖关系的创建和管理置于程序外部的技术,在Spring中Bean组件的实例化和依赖关系的管 ...

  3. Spring常用的三种注入方式

    Spring通过DI(依赖注入)实现IOC(控制反转),常用的注入方式主要有三种:构造方法注入,setter注入,基于注解的注入. 构造方法注入 先简单看一下测试项目的结构,用maven构建的,四个包 ...

  4. Spring的三种注入方式(为什么推荐构造器注入?)

    Spring的三种注入方式 一.属性注入 @Resource和@Autowired的区别 为什么尽量使用 @Resource? 二.setter 注入 三.构造器注入 具体可以看看Spring官网 为 ...

  5. spring三种注入方式

    设置Spring的作用域 或者使用枚举值设置 单例和多里使用场景 自动注入 @Primary 一个接口有多个实现被spring管理吗,在依赖注入式,spring会不知道注入哪个实现类就会抛出NoUni ...

  6. 扯一把 Spring 的三种注入方式,到底哪种注入方式最佳?

    循环依赖这个问题,按理说我们在日常的程序设计中应该避免,其实这个本来也是能够避免的.不过由于总总原因,我们可能还是会遇到一些循环依赖的问题,特别是在面试的过程中,面试考察循环依赖,主要是想考察候选人对 ...

  7. Spring 的三种注入方式?

    1. 实例的注入方式 首先来看看 Spring 中的实例该如何注入,总结起来,无非三种: 属性注入 set 方法注入 构造方法注入 我们分别来看下. 1.1 属性注入 属性注入是大家最为常见也是使用最 ...

  8. Spring 的三种注入方式,到底哪种注入方式最佳?

    1. 实例的注入方式 首先来看看 Spring 中的实例该如何注入,总结起来,无非三种: 属性注入 set 方法注入 构造方法注入 我们分别来看下. 1.1 属性注入 属性注入是大家最为常见也是使用最 ...

  9. Spring 依赖注入的理解及三种注入方式

    Spring 依赖注入概念和三种注入方式(理解及应用) 什么是注入 要了解Spring的三种注入方式首先前提是得先了解一下什么是注入,相信很多人对这个概念都是模糊不清的,网上的解释是这样的: 依赖注入 ...

最新文章

  1. mysql和Oracle数据库的一些异同。
  2. Scikit-learn 数据预处理之鲁棒缩放RobustScaler
  3. alexnet vgg_从零开始:建立著名的分类网2(AlexNet / VGG)
  4. mysql 日期滞后_如何滞后MySQL中的列?
  5. java游戏运行环境_Java运行环境
  6. 【软件测试】测试需求分析
  7. mtk 驱动开发(71)---Android getevent,sendevent,input keyevent
  8. 实用的 Python —— 进制(二进制形式中 1 的位数)
  9. C++ STL 容器元素排列之next_permutation和prev_permutation的使用示范
  10. sql递归查询上级_递归的实际业务场景之MySQL 递归查询
  11. CICD详解(十一)——sonar详解
  12. 脉宽调制功能(PWM)
  13. 柴静十年看见了什么——一个央视记者的心灵史
  14. 科技创新就要高浓度、高密度
  15. python将小数转化为二进制_Python实现的十进制小数与二进制小数相互转换功能
  16. sql转置两种实现方式记录
  17. excel 2种方法将长日期修改成短日期
  18. sipp介绍与脚本撰写(一)
  19. ASP.NET C#药店管理信息系统(含论文)毕业设计【演示视频】
  20. 三级网络技术_无线局域网设备安装与调试

热门文章

  1. 读《精进-如何成为一个厉害的人》有感
  2. Java中将base64编码字符串转换为图片
  3. B863AV3.2-M、B863AV3.1-M2、E900V22C通刷固件(可救砖)
  4. 数据结构到底重要吗?
  5. 期末大作业--德州扑克(包含双人手动发牌,多人手动发牌,多人手动、自动发牌三个版本)
  6. 洛谷 P2657 (数位DP)
  7. amd兼容AM3服务器cpu型号,兼容性超强的AM2/AM2+/AM3接口_主板新闻-中关村在线
  8. word里单词会被分成两部分
  9. 微信小程序:长期稳定短视频去水印
  10. 反向跟单——结果偏见