Spring学习(一)-----IoC

一、概述

       Spring框架可以说是Java世界中最成功的框架,在企业开发中,大部分企业框架都基于Spring框架。它的成功来自于它的核心理念:

  • IoC:IoC是Spring的基础
  • AOP:AOP是其重要的功能,最为典型的当属数据库事务的使用

二、先看看IoC(控制反转:Inversion of Control

1、什么是控制反转?

    控制反转是一种通过描述(XML配置或者注解)并且通过第三方去生产或者去获取特定对象的方式。

  • 谁控制谁,控制什么传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有一个专门的容器来创建这些对象,即由IoC容器来控制对象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。
  • 为何是反转,哪些方面反转了:有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。
  •                                                  Spring学习(一)-----IoC

2、在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)

3、举例:

     当熟悉财务的同事需要完成对财务接口模块的开发,就可以将其服务发布到Spring IOC 的容器里,这个时候只需要通过描述得到对应的财务接口,就可以完成对应的财务操作了,而这个财务模块是如何工作的,又需要依赖哪些对象,都是由熟悉财务模块的同事完成的,这些我都不需要去理解,我只需要知道它能完成对应的财务操作就可以了。同样,我也会把交易接口模块发布到Spring IOC 容器里,这样同事就可以通过容器获取交易接口得到一些交易明细,至于交易模块如何工作,依赖哪些对象不是他们所关心的。

     上面例子,就是一种控制反转的理念。它最大的好处就是在于降低对象之间的耦合。在一个系统中有哪些类,具体怎么实现并不需要我们去理解,只需要知道它怎么用就好了。至于这些类的对象的创建依靠与IoC容器。

    我们已经知道IoC容器的作用。它可以容纳我们所开发的各种Bean,并且我们可以从中获取各种发布在Spring IoC容器里的Bean,并且通过描述得到它。

   总的来说: IoC是一个容器,Spring认为一切的java资源都是java Bean,容器的目的的就是管理这些bean和它们之间的关系。所以IoC里面装载了各种Bean,包括bean的创建、行为、事件等都由IoC容器管理(怎么管理:管理对象和其依赖关系,是由IoC自己通过描述创建的,即Spring是依赖描述来完成对象的创建及其依赖关系的)。