码迷,mamicode.com
首页 > 编程语言 > 详细

Spring 学习笔记02

时间:2017-09-07 00:57:31      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:out   两种   构造器   back   依赖   oid   ext   void   amp   

依赖注入

依赖注入的方式主要有两种,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();
    }
}

结果:

技术分享

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>

使用测试类运行:

技术分享

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

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

依赖关系的注入。

Spring 学习笔记02

标签:out   两种   构造器   back   依赖   oid   ext   void   amp   

原文地址:http://www.cnblogs.com/yueguangmoliya/p/7487606.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!