Spring 学习笔记02
Posted 月光莫里亚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring 学习笔记02相关的知识,希望对你有一定的参考价值。
依赖注入
依赖注入的方式主要有两种,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的主要内容,如果未能解决你的问题,请参考以下文章
java企业级信息系统开发学习笔记02初探spring——利用组件注解符精简spring配置文件
[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段