NO.02 依赖注入

目录

1、前言

2、两种依赖注入的方式

2.1 依赖注入之setter注入

2.2 依赖注入之构造器注入

3、依赖注入之特殊值处理

3.1 字面量赋值

3.2 null值赋值

3.3 XML实体(<)

4、完整测试类


1、前言

依赖注入就是为类的属性赋值,在我们获取bean的时候,bean的各个属性有初始值。以依赖注入的方式为类的属性赋值有两种方式,分别为:setter注入、构造器注入,在本篇中以Minister实体类为例。Minister实体类如下:

public class Minister {
    private Integer id;
    private String ministerName;
    private Integer age;
    private char gender;
    private Integer ministerDutie;

    public Minister(Integer id, String ministerName, Integer age, char gender, Integer ministerDutie) {
        this.id = id;
        this.ministerName = ministerName;
        this.age = age;
        this.gender = gender;
        this.ministerDutie = ministerDutie;
    }

    public Minister() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getMinisterName() {
        return ministerName;
    }

    public void setMinisterName(String ministerName) {
        this.ministerName = ministerName;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    public Integer getMinisterDutie() {
        return ministerDutie;
    }

    public void setMinisterDutie(Integer ministerDutie) {
        this.ministerDutie = ministerDutie;
    }

    @Override
    public String toString() {
        return "Minister{" +
                "id=" + id +
                ", ministerName='" + ministerName + '\'' +
                ", age=" + age +
                ", gender=" + gender +
                ", ministerDutie=" + ministerDutie +
                '}';
    }
}

2、两种依赖注入的方式

2.1 依赖注入之setter注入

在Spring配置文件中配置bean时,在property子标签中配置类中各个属性的值。

    <bean id="Minister1" class="com.review.spring.pojo.Minister">
        <property name="id" value="1" ></property>
        <property name="ministerName" value="蒙恬" ></property>
        <property name="age" value="20" ></property>
        <property name="gender" value="男" ></property>
        <property name="ministerDutie" value="2" ></property>
    </bean>

property标签:通过组件类的setXxx()方法给组件对象设置属性

name属性:指定属性名(这个属性名是getXxx()、setXxx()方法定义的,和成员变量无关)

value属性:指定属性值

在测试类中根据id和类型的方式获取bean,并输出bean。

    @Test
    public void getBeanToMinister1() {
        //获取IOC容器
        ApplicationContext ioc=new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取IOC容器中的bean
        Minister minister=ioc.getBean("Minister1",Minister.class);
        System.out.println(minister);
    }

 输出结果:

2.2 依赖注入之构造器注入

若使用构造器注入,实体类中必须有有参构造方法。下面是以构造器注入的方式配置bean,在bean标签的constructor-arg子标签中配置实体类中各个属性的值。

    <bean id="Minister2" class="com.review.spring.pojo.Minister">
        <constructor-arg name="id" value="2" ></constructor-arg>
        <constructor-arg name="ministerName" value="蒙毅" ></constructor-arg>
        <constructor-arg value="18"></constructor-arg>
        <constructor-arg value="男"></constructor-arg>
        <constructor-arg value="2"></constructor-arg>
    </bean>

此时name属性可以忽略不写,但必须按照实体类构造方法中的属性顺序赋值。

在测试类中根据id和类型的方式获取bean,并输出bean。

    @Test
    public void getBeanToMinister2() {
        //获取IOC容器
        ApplicationContext ioc=new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取IOC容器中的bean
        Minister minister=ioc.getBean("Minister2",Minister.class);
        System.out.println(minister);
    }

结果输出

3、依赖注入之特殊值处理

3.1 字面量赋值

当我们声明一个变量age的时候,给age赋值为18,则age就不代表单词age了,而是作为一个变量的名字。当我们引用age 的时候,我们实际上拿到的值是18。如果age带双引号如“age”,那么它就表示一个age单词。“age”就代表它本身,这就是字面量。

在bean标签中的property子标签,使用value属性给bean的属性赋值时,Spring会把value属性的值看做字面量。

如:

<property name="ministerName" value="蒙恬" ></property>

3.2 null值赋值

在bean中给类的属性为null赋值时,不能直接给property标签中的value属性赋null,如下:

<property name="ministerName" value="null" ></property>

以上结果Ministerd的属性ministerName值不为空(null),相反的ministrName的值为字符串“null”。

正确的赋值方式如下,ministerName的值为空(null)。

<property name="ministerName" ><null/></property>

3.3 XML实体(<)

在XML中为类的属性赋值时,值之中含有'<'时,不能在XML文档中随便使用。如要使用'<'有以下两种方式:使用XML实体来代替、使用CDATA节。

①使用XML实体来代替

&lt表示'<',注意:&lt后的分号';'不能忘记,否则报错。

<property name="ministerName" value="20&lt;21" ></property>

②使用CDATA节

CDATA中的C代表Character,是文本、字符的含义,CDATA就表示纯文本数据。XML解析器看到CDATA节就知道这里是纯文本,就不会当作XML标签或属性来解析,所以CDATA节中写什么符号都随意。

此时value属性要使用value标签,在标签内为value为name属性表示的变量赋值。

<property name="ministerName"  ><value><![CDATA[20<21]]></value></property>

4、完整测试类

public class MinisterTest {
    @Test
    public void getBeanToMinister1() {
        //获取IOC容器
        ApplicationContext ioc=new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取IOC容器中的bean
        Minister minister=ioc.getBean("Minister1",Minister.class);
        System.out.println(minister);
    }

    @Test
    public void getBeanToMinister2() {
        //获取IOC容器
        ApplicationContext ioc=new ClassPathXmlApplicationContext("applicationContext.xml");
        //获取IOC容器中的bean
        Minister minister=ioc.getBean("Minister2",Minister.class);
        System.out.println(minister);
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值