发表于: 2017-07-14 22:34:01

1 1027


今天完成的事情:看书学习spring

      自己买的《精通spring4.x——企业应用开发实战》终于到了,拿着这本书好好学习一下,一个多月来大多数是看别人的博客,感觉自己学的很散乱,没有一个比较体系的去学习。别人的代码复制下来,改点基础的东西,能跑通,这个任务基本上就算过了。学的很零散东一点西一点,对于spring几个任务下来,只是知道他怎么用,为什么要这么用,对于他的原理操作流程没有一个自己的深入的了解。别人代码一看确实能看懂,但是别人代码的精妙之处自己体会不到,自己造轮子要墨迹半天,感觉自己很飘。这几天多花点时间仔细研读这本书的第二篇核心篇,了解spring核心的东西。

      

IoC概述

IoC(Inversion of Control,控制反转)是spring容器的内核,AOP、声明式事务等功能都是以此为基础的,然而这个概念晦涩难懂,书上是以一个具体实例来说明的,这篇博文也写得很好http://jinnianshilongnian.iteye.com/blog/1413846

谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。

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

  


左图为传统模式,右图IOC

图已经一目了然了,最主要的差别就是多了个中介,举个例子,你原来想去租房子,你需要去张贴栏各种地方去看租房广告,看房子的各种信息。现在你只需要去找中介了,我们像中介提出自己的各种要求,中介就会根据我们的要求来提供一个房子,然后我们去看房入住就行了。简单明了,如果中介给我们的人选不符合要求,我们就会抛出异常。整个过程不再由我自己控制,而是有中介这样一个类似容器的机构来控制。

Spring所倡导的开发方式就是如此,所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。


DI概述

因为IoC确实不够开门见山,所以2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”

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

 

理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”,那我们来深入分析一下:

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

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

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

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


IOC和DI的关系

这是同一概念的不同角度描述


明天计划的事情:继续看书

遇到的问题:java反射不是很了解,继续学

收获:spring基础


返回列表 返回列表
评论

    分享到