Spring MVC+MyBatis开发从入门到项目实践(超值版)
上QQ阅读APP看书,第一时间看更新

3.1 Spring IoC简介

IoC是随着近年来轻量级容器(Lightweight Container)的兴起而逐渐被很多人提起的一个名词,是一种通过描述来生成或者获取对象的技术。可以说,Spring是一种基于IoC容器编程的框架。

3.1.1 Spring容器是什么

从概念角度来讲,Spring容器是Spring框架的核心,是用来管理对象的。容器创建对象,把它们连接在一起并进行配置,对它们从创建到销毁的整个生命周期进行管理。

从具体事物角度来讲,项目中哪些事务是Spring容器?例如,在Java项目中,使用实现了org.springframe work.context.ApplicationContext接口的实现类;在Web项目中,使用spring.xml-Spring的配置文件。

从代码角度来讲,Spring容器就是某个实现了ApplicationContext接口的类的实例。也就是说,从代码层面,Spring容器其实就是ApplicationContext(实例化对象)。

简而言之,容器就是Java程序,原先必须自行编写程序以管理对象关系,现在容器都能够自动进行管理,常用容器有WebSphere、WebLogic、Resin、Tomcat。

3.1.2 Spring IoC是什么

IoC是一种设计思想。在Java程序开发中,IoC意味着将设计好的对象交给容器控制,而不是由程序开发人员在对象内部直接控制。接下来就对IoC做详细解释。

1. IoC控制

在传统Java SE程序设计中,需要程序开发人员直接在对象内部通过New命令创建对象,使程序主动创建依赖对象;而IoC有一个专门容器来创建这些对象,即由IoC容器来控制对象的创建。一般是IoC容器控制了对象,而且主要控制了外部资源的获取。IoC容器所控制的不仅有对象,还有文件等。

2. IoC反转

传统的应用程序是由程序开发人员在对象中主动控制从而直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建并注入依赖对象,对象只是被动地接受依赖对象,所以称为反转,即依赖对象的获取被反转。

传统程序设计如图3-1所示,需要在客户端类中主动去创建相关对象然后再结合。

有IoC容器后,不需要在客户端类中主动去创建这些对象了,如图3-2所示。

图3-1 传统程序设计

图3-2 有IoC容器后的程序设计

3.1.3 Spring IoC的作用

IoC容器就是具有依赖注入功能的容器,IoC容器负责实例化、定位、配置应用程序中的对象,以及建立这些对象间的依赖。应用程序无须直接在代码中创建相关的对象,应用程序由IoC容器进行组装。

IoC是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由程序开发人员在类内部主动创建依赖对象,从而导致类与类之间高耦合,难以测试。有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器注入组合对象,所以对象与对象之间是松散耦合,这样方便测试并利于功能复用,更重要的是使程序的整个体系结构变得非常灵活。

其实IoC给编程带来的最大改变体现在思想上,即编程思想发生了“主从换位”的变化。程序原本要获取什么资源都是主动出击,但是有了IoC容器之后,应用程序就变成被动地等待IoC容器来创建并注入它所需要的资源。