Spring依赖注入和控制反转

李亚衡

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

Spring是什么?

Spring是一个开源的轻量级开发应用框架

最早由Rod Johnson 创建,并在《Expert One-on-One:J2EE Design and Development》这本著作中进行了介绍。

Spring是为了解决企业级应用开发的复杂性创建的,Spring可以让简单的JavaBean实现之前只有EBJ才能完成的事情。

但Spring不仅仅局限于服务器端开发,任何JAVA应用都能在简单性,可测试性和松耦合的方面从Spring中获益。

Spring的不同之处就在于许多其他框架都声明在“某些”方面做了简化,但Spring是致力于“全方位的简化JAVA的开发,那么这势必会引出一些疑问。

Spring为什么这么牛X ?

为了降低JAVA开发的复杂性,Spring采取了4中关键策略:

1.基于POJO的轻量级和最小侵入性编程

2.通过依赖注入和面向接口实现松耦合

3.基于切面和惯例进行声明式编程

4.通过切面和模板减少板式代码

依赖注入(DI)和控制反转(IOC)

2.知识剖析

什么是IOC?

Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中, Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。

如何理解好控制反转(IOC)呢?

谁控制谁,控制了什么?

为何是反转,有哪些方面反转了?

谁控制谁,控制什么

传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建;

谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。

为何是反转,哪些方面反转了?

了解反转先认识一下正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转; 而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;

哪些方面反转了?依赖对象的获取被反转了

什么是DI?

DI—Dependency Injection,即“依赖注入”:是组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。 依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置 ,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。

如何理解好依赖注入(DI)呢?

谁依赖谁,为什么需要依赖

谁注入谁,注入了什么

谁依赖于谁:当然是应用程序依赖于IoC容器;

为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;

谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;

注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。

3.常见问题

IoC和DI之间有什么关系呢?

其实它们是同一个概念的不同角度描述,由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维护对象关系), 所以2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”,相对IoC 而言,“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”。

4.解决方案

5.编码实战

6.扩展思考

我们现在使用的是Spring的依赖注入, 前面也说到Spring是全方位的简化JAVA开发, 那Spring还有什么是我们没有体会到但是却是出了冰山一角之外的冰山呢?

7.参考文献

《Spring实战》

http://sishuok.com/forum/blogPost/list/2427.html

8.更多讨论

谢谢观看

By:李亚衡