Spring框架(二)依赖注入概念

来源:互联网 发布:淘宝卖家怎么看总收入 编辑:程序博客网 时间:2024/06/05 20:07

Spring中被人使用最多的可能就是他的依赖注入了,比如SSH整合的时候,必然会使用Spring的依赖注入。依赖注入简写DI,全称:Dependency Injection。依赖注入也有另外一个名字叫做控制反转(IOC)。

在讲解Spring的依赖注入的使用之前,我们需要先搞明白什么是依赖注入。接下来举个例子:

一般领导都会有一个秘书,要秘书有什么用呢?估计大家都知道,可以把一些事情交给秘书来做,减少领导的工作量,这样领导有更多精力去处理那些更重要的事情。比如,领导要喝水,如果没有秘书就是自己去倒水,浪费时间;如果有秘书,就是秘书倒好谁递到领导手上,领导就没有毕业为这点小事分心了。

上面例子中的秘书就好比依赖注入的框架,秘书倒好水、泡好茶叶,递给领导。依赖注入框架就是将某个对象(茶水)递给需要此对象(茶水)的对象(领导)。接下来用代码的方式来演示上面的例子。

例子1:领导自己倒水。

创建一个Water类:

package com.androidxx.ioc;/** * 水 * @author yangjw * */public class Water {@Overridepublic String toString() {return "茶水";}}

创建一个Leader类:

package com.androidxx.ioc;/** * 领导 * @author yangjw * */public class Leader {/** * 喝水 */public void drink() {//创建水的对象Water water = new Water();//打印日志,用来表示领导喝水了System.out.println("领导喝" + water);}}
测试类LeaderTest:

package com.androidxx.ioc;import static org.junit.Assert.*;import org.junit.Test;public class LeaderTest {@Testpublic void test() {new Leader().drink();}}
在以上的例子中,Leader中亲自创建的Water对象,就好比领导亲自去倒水喝。这样在程序中就存在领导和水之间的耦合非常大,如果领导现在不想和茶水了,想喝汽水,就需要改Leader类中的源码了。这样在实际开发中非常麻烦,一个类还好说,如果有1000个这样的类需要修改,那程序员会崩溃。如果领导和水之间是通过秘书关联的,那领导就不要亲自去创建Water对象了,至于是要和汽水、咖啡、茶水都交由秘书去办,这样就轻松多了,维护起来就方便多了。接下来看一下有秘书的例子:

例子2:领导要喝水,秘书去倒好,给领导。

此例子在上面的例子1的基础上修改了Leader类和添加了Secretary(秘书)类,Water类不变(同上)。

秘书Secretary类:

package com.androidxx.ioc;/** * 秘书 * @author yangjw * */public class Secretary {/** * 倒水的行为 * @return 准备好的水 */public Water getWater() {return new Water();}}
领导Leader类:

package com.androidxx.ioc;/** * 领导 * @author yangjw * */public class Leader {/** * 喝水 */public void drink(Water water) {//打印日志,用来表示领导喝水了System.out.println("领导喝" + water);}}
测试类:

package com.androidxx.ioc;import static org.junit.Assert.*;import org.junit.Test;public class LeaderTest {@Testpublic void test() {//秘书去倒水Water water = new Secretary().getWater();//倒好的水交给领导(注入给领导)new Leader().drink(water);}}
以上例子,可以看到Water类已经不在Leader类中创建了,这样Leader和Water就没有耦合了,而是将Water交由Secretaty创建,Secretary创建好之后交给Leader。这就是依赖注入。

为了没有任何杂质、简洁的介绍依赖注入的概念,以上的例子非常的简单。所以,可能有人会问,这样看不出有什么好处啊。确实,就以上例子而言看不到好处;但是一个项目不可能这么简单。本案例也只是希望能让你理解什么是依赖注入,至于依赖注入的好处就是解耦,不用花太多精力去关心对象的创建和维护。

Spring的DI功能就是充当上面案例中的秘书角色,也就是我们可以使用Spring的DI模块去替换Secretary这个类。下一篇文章【Spring依赖注入之注解方式】将为大家介绍怎么使用Spring替换掉Secretary类,从而完成Spring的依赖注入。


不甘平凡,才会不平凡




0 0
原创粉丝点击