Spring系列之IOC

【回顾】
    通过前两篇博客,我们对Spring框架的理论和应用都有了一定的了解,也知道了Spring的核心是IOC,本篇博客将对IOC作进一步的学习。
    Spring帮助我们更简单地实现功能,在于它的使用,可以让我们不必自己去创建所需要的对象实例,它包揽了此项工作,给我们提供了一个容器。我们只需要把东西放进去就好。
    【问题】
    IOC(Inversion of Control),控制反转。 它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。所谓的“控制反转”概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器。
    这样的概念即使是用文字表达出来,也是觉得很抽象的。从网上的一篇文章里,看到了关于理解此概念提出的几个问题,很简单,但如果对此概念不清楚,答案自然就不能脱口而出了。
     1.控制反转:谁控制谁?控制什么?为什么叫反转?
    2.依赖注入和控制反转是一个概念吗?
    3.依赖:谁依赖谁?为什么需要依赖?
    4.注入:谁注入谁?注入的是什么?
    5.参与者都有谁?
    大家心里都有答案了么?其实,在回答前四个问题之前,我们必须清楚第5个问题的答案。整个事件参与者都有谁?
    【解答】
     问题5: 参与者都有谁?
    回想之前的代码,要实现打印结果到控制台,并不是某个对象可以自己直接做到的,它需要调用其它对象。并且使用Spring,不再是自己去调用,而是借助容器。这样一来,问题的答案就有了,下面用专业的术语表达:
     一般有三方参与者,一个是某个对象;一个是IoC/DI的容器;另一个是某个对象的外部资源。
    某个对象指的就是任意的、普通的Java对象; IoC/DI的容器简单点说就是指用来实现IoC/DI功能的一个框架程序;对象的外部资源指的就是对象需要的,但是是从对象外部获取的,都统称资源,比如:对象需要的其它对象、或者是对象需要的文件资源等等。
     参与者都知道了,下面知道了整个事件中参与者在何时扮演着怎样的角色,第1-4个问题的答案也就清楚了。
    问题1:谁控制谁?控制什么?为什么叫反转?
    当然是容器去控制对象了,控制的是对象的创建。因为在未使用Spring之前,我们都需要自己主动地去创建其它具体的对象,现在我们不必做这项工作了,交给了容器,它的主动,我们只需要被动等待,也就成了反转了。
     问题2:依赖注入和控制反转是同一个概念么?
    这里又涉及到了另一个名词,“依赖注入”,即DI。在前面的文章中,也多次提到了。其实,实现控制反转的实现方式就是将对象注入,从而有了此概念。可以说,它们是同一个概念,只是描述的角度不同。
    “依赖注入”,从应用程序的角度出发,应用程序需要依赖容器,注入对象,实现创建。
    “控制反转”,从容器的角度出发,容器反向控制应用程序对象的创建。
     问题3: 依赖:谁依赖谁?为什么需要依赖?
    问题2明白了,问题3的答案自然也就有了。应用程序依赖容器,因为应用程序需要容器提供的对象所需要的资源。
     问题4: 注入:谁注入谁?注入的是什么?
    将对象注入到容器中,注入的是对象所需要的外部资源。

猜你喜欢

转载自blog.csdn.net/zwmnhao1980/article/details/78966729