精解Spring之IoC原理与具体使用

2017-03-01  本文已影响0人  Ystrator

Spring是轻量级的且是非侵入式的

1. 深入理解依赖注入

依赖注入(DI)也被称为控制反转(IoC),两者的含义相同,只是从两个角度来描述同一个概念。但是对于Spring初学者来说,这两种说法同样生涩难懂,因此,我们尝试用更加简单通用的语言和例子来描述出这个概念。
用一句话概括依赖注入就是" 不要来找我,我会去找你 ",也就是说,一个类不需要去查找或实例化他们所依赖的类。对象间的依赖关系是在对象创建时由负责协调项目中各个对象的外部容器提供并管理的。也就是强调了对象间的某种依赖关系是有容器在运行期间注入调用者的,控制程序间关系的实现交给了外部的容器来完成。
在原来我们可能会使用工厂模式来进行解决掉这个问题。工厂模式专门负责对大量有共同接口的类进行实例化。工厂模式可以动态地决定应该将哪一个类实例化,而无需事先知道每次要实例哪一个类。
但是,如果使用Spring的话,就会比之还要简单。DI就是将协调对象之间合作的任务从对象本身转移出来,而由Spring框架来负责。IoC是由容器来控制程序之间的关系,而不是有程序代码直接控制。控制权由应用代码转移到了外部容器,控制权发生了反转。

2. 依赖注入的3种实现方式

2.1 设值注入

设值注入是指IoC容器使用Setter方法来注入被依赖的实例。通过调用无参构造器或无参static工厂方法实例化bean后,调用bean的setter方法,即可实现基于setter的DI。
PS:我们上一节中,所介绍的程序就是一个简单的设值注入,所以这里就不再进行介绍了。

2.2 构造方法注入

构造方法注入是指IoC容器使用构造方法来注入被依赖的实例。基于构造器的DI通过调用参数的构造方法来实现,每个参数代表着一个依赖。下面展示了只能使用构造方法参数来注入依赖关系的例子。请注意,这个类并没有什么特别之处,仍然是一个普通的Java类。

<constructor-arg> <ref bean="u"/> </constructor-arg>

这一句代码就是能等同与上面的程序中,我们的setter注入方式进行注入的。

2.3 接口注入

接口注入需要我们的类实现特定的接口或继承特定的类。但是这样一来,我们的类就必须依赖于这些特定的接口或特定的类,这也意味着侵入性。Apache开源的Avalon和EJB容器属于这一类。但是因为它的侵入性,这种注入方式基本上已经被遗弃了。Spring是轻量级的、非侵入性的框架,故其并不支持接口注入。

2.4 DI 3种实现方式的比较

1.设值方法注入的优点

2.设值方法注入的缺点

3.构造方法注入的优点

4.构造方法的缺点

上一篇下一篇

猜你喜欢

热点阅读