Spring构造器的三种注入方式

构造器注入:通过构造方法注入就相当于给构造方法的参数传值,构造注入的优势是通过构造强制依赖关系,使得实例化出的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;
    }

    @Override
    public 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;
    }

    @Override
    public 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. 比较实用,一些编译器都会自动提示。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值