Spring 学习笔记02

来源:互联网 发布:淘宝店铺开店资料 编辑:程序博客网 时间:2024/06/04 00:28

依赖注入

依赖注入的方式主要有两种,setter注入和构造器注入

1.setter注入

setter注入指的是通过成员变量的setter方法来注入被依赖的对象

首先定义两个接口:

public interface People {    void drinkWater();}
public interface Water {    String makeDrink();}

定义实现类

public class Tea implements Water{    public String makeDrink() {                return "开始泡茶";    }    }
public class Chinese implements People{    private Water  water;    public void setWater(Water water) {        this.water = water;    }    public void drinkWater() {        System.out.println(water.makeDrink());        System.out.println("中国人喜欢喝茶");    }    }

配置文件中配置并注入bean

    <bean id="chinese" class="com.huan.example.Chinese">        <property name="water" ref="Tea"></property>    </bean>        <bean id="Tea" class="com.huan.example.Tea">    </bean>

测试:

public class TestPeople {    public static void main(String[] args) {        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");        Chinese chinese = ac.getBean("chinese", Chinese.class);        chinese.drinkWater();    }}

结果:

image

Spring会自动检测<bean>元素中的<property>标签,在Spring调用默认的构造器创建Bean的实例之后会立刻调用对应的setter方法为Bean的

成员变量注入值。

2.构造注入

构造注入值的是在利用类的构造器构造实例时,对依赖的值进行注入,标签元素为<construct-arg../>

更改上面的Chinese实现类的代码以及配置文件

public class Chinese implements People{    private Water  water;    public Chinese(Water water){        this.water = water;    }    //    public void setWater(Water water) {//        this.water = water;//    }    public void drinkWater() {        System.out.println(water.makeDrink());        System.out.println("中国人喜欢喝茶");    }    }
    <bean id="chinese" class="com.huan.example.Chinese">        <!-- <property name="water" ref="Tea"></property> -->        <!-- 其他属性 index 代表构造器第几个参数   type 指定参数的类型-->        <constructor-arg ref="Tea" />    </bean>    <bean id="Tea" class="com.huan.example.Tea">    </bean>

使用测试类运行:

image

结果和set注入一致,构造注入和setter注入的主要区别在于:setter注入是先通过无参数的构造器创建一个Bean的实例,

然后调用对应的setter方法注入依赖关系,而构造器注入则直接调用有参数的构造器,当Bean实例创建完成后已经完成了

依赖关系的注入。