谈谈对Spring IOC的理解

  • 时间:
  • 浏览:0
  • 来源:万人牛牛棋牌_万人牛牛棋牌官网

  IoC 都在并都在技术,太大并都在思想,一一俩个 重要的面向对象编程的法则,它能指导亲戚亲戚大伙儿怎么设计出松耦合、更优良的多多应用程序 。传统应用多多应用程序 都在由亲戚亲戚大伙儿在类实物主动创建依赖对象,从而原应 类与类之间高耦合,难于测试;有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,太大对象与对象之间是 松散耦合,太大也方便测试,有利于功能复用,更重要的是使得多多应用程序 的整个体系价值形式变得非常灵活。

  IoC和DI由什么关系呢?实在 它们是同一一俩个 概念的不同高度描述,之后控制反转概念比较含糊(之后太大理解为容器控制对象这些俩个 层面,不能自己让人想到谁来维护对象关系),太大10004年大师级人物Martin Fowler又给出了一一俩个 新的名字:“依赖注入”,相对IoC 而言,“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”

  这是我对Spring的IoC(控制反转)的理解。DI(依赖注入)实在 太大IOC的另外并都在说法,DI是由Martin Fowler 在10004年初的一篇论文中首次提出的。他总结:控制的什么被反转了?太大:获得依赖对象的最好的法律土办法反转了。

  没有IoC是怎么做的呢?一阵一阵像通过婚介找女亲戚大伙儿,在我和女亲戚大伙儿之间引入了一一俩个 第三者:情人关系介绍所。婚介管理了太大男男女女的资料,让人要向婚介提出一一俩个 列表,告诉它让人要找个什么样的女亲戚大伙儿,比如长得像李嘉欣,身材像林熙雷,唱歌像周杰伦,速率像卡洛斯,技术像齐达内相似于的,太大婚介就会按照亲戚亲戚大伙儿的要求,提供一一俩个 mm,亲戚亲戚大伙儿只可不能不能去和她谈恋爱、结婚就行了。简单明了,之后婚介给亲戚亲戚大伙儿的人选不符合要求,亲戚亲戚大伙儿就会抛出异常。整个过程不再由个人控制,太大有婚介太大一一俩个 相似于容器的机构来控制。Spring所倡导的开发最好的法律土办法太大没有,所有的类都在在spring容器中登记,告诉spring你是个什么东西,你可不能不能什么东西,太大spring会在系统运行到适当的之后,把让人要的东西主动让人,共同也把你交给这些可不能不能你的东西。所有的类的创建、销毁都由 spring来控制,之后多说控制对象生存周期的不再是引用它的对象,太大spring。对于某个具体的对象而言,之后是它控制这些对象,现在是所有对象都被spring控制,太大这叫控制反转。

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

  对于Spring Ioc这些核心概念,我相信每一一俩个 学习Spring的人都在有个人的理解。这些概念上的理解没有绝对的标准答案,仁者见仁智者见智。之后有理解可不能不能 位之后理解错的地方,欢迎广大园友指正!

  理解了IoC和DI的概念后,一切都将变得简单明了,剩下的工作太大在spring的框架中堆积木而已。

  首先想话语IoC(Inversion of Control,控制反转)。这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,太大由spring来负责控制对象的生命周期和对象间的关系。这是什么意思呢,举个简单的例子,亲戚亲戚大伙儿是怎么找女亲戚大伙儿的?常见的清况 是,亲戚亲戚大伙儿到处去看哪里有长得漂亮身材又好的mm,太大打听她们的兴趣爱好、qq号、电话号、ip号、iq号………,想最好的法律土办法认识她们,投其所好送其所要,太大嘿嘿……这些过程是僵化 深奥的,亲戚亲戚大伙儿可不能不能个人设计和面对每个环节。传统的多多应用程序 开发也是没有,在一一俩个 对象中,之后要使用另外的对象,就可不能不能得到它(个人new一一俩个 ,之后从JNDI中查询一一俩个 ),使用完之后可不能不能将对象销毁(比如Connection等),对象始终会和这些的接口或类藕合起来。

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

  当有了IoC/DI的容器后,在客户端类中不再主动去创建什么对象了,如图2-2所示:

学习过Spring框架的人一定都在听过Spring的IoC(控制反转) 、DI(依赖注入)这些俩个 概念,对于初学Spring的人来说,总实在 IoC 、DI这些俩个 概念是模糊不清的,是不能自己理解的,今天和亲戚亲戚大伙儿分享网上的这些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解。

  IoC很好的体现了面向对象设计法则之一—— 好莱坞法则:“别找亲戚亲戚大伙儿,亲戚亲戚大伙儿找你”;即由IoC容器帮对象找相应的依赖对象并注入,而都在由对象主动去找。

  理解DI的关键是:“谁依赖谁,为啥可不能不能依赖,谁注入谁,注入了什么”,太大们来深入分析一下:

  ●注入了什么:太大注入某个对象所可不能不能的实物资源(包括对象、资源、常量数据)





  首不能自己分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容完正来自原文,原文地址:http://jinnianshilongnian.iteye.com/blog/1413846

  实在 IoC对编程带来的最大改变都在从代码上,太大从思想上,发生了“主从换位”的变化。应用多多应用程序 太大是老大,要获取什么资源都在主动出击,太大在IoC/DI思想中,应用多多应用程序 就变成被动的了,被动的等待英文IoC容器来创建并注入它所可不能不能的资源了。

  看一遍太大对Spring的Ioc理解的文章,好多人对Ioc和DI的解释都晦涩难懂,反正太大并都在说不清,道不明的感觉,读完之后依然是一头雾水,感觉太大开涛这位技术牛人写得一阵一阵通俗易懂,他清楚地解释了IoC(控制反转) 和DI(依赖注入)中的每一一俩个 字,读完之后给人并都在豁然开朗的感觉。我相信对于初学Spring框架的人对Ioc的理解应该是有很大帮助的。

  ●为啥可不能不能依赖:应用多多应用程序 可不能不能IoC容器来提供对象可不能不能的实物资源

  Ioc—Inversion of Control,即“控制反转”,都在什么技术,太大并都在设计思想。在Java开发中,Ioc原应 将你设计好的对象交给容器控制,而都在传统的在你的对象实物直接控制。怎么理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为啥是反转(有反转就应该有正转了),什么方面反转了”,太大们来深入分析一下:

  用图例说明一下,传统多多应用程序 设计如图2-1,都在主动去创建相关对象太大再组合起来:

图1-2有IoC/DI容器后多多应用程序 价值形式示意图

  ●为啥是反转,什么方面反转了有反转都在正转,传统应用多多应用程序 是由亲戚亲戚大伙儿个人在对象中主动控制去直接获取依赖对象,之后多正转;而反转则是由容器来帮忙创建及注入依赖对象;为啥是反转?之后由容器帮亲戚亲戚大伙儿查找及注入依赖对象,对象太大被动的接受依赖对象,太大是反转;什么方面反转了?依赖对象的获取被反转了。

  太大控制反转IoC(Inversion of Control)是说创建对象的控制权进行转移,之后创建对象的主动权和创建时机是由个人把控的,而现在这些权力转移到第三方,比如转移交给了IoC容器,它太大一一俩个 专门用来创建对象的工厂,让人要什么对象,它之后人什么对象,有了 IoC容器,依赖关系就变了,太大的依赖关系就什么都没有,它们都依赖IoC容器了,通过IoC容器来建立它们之间的关系。

图1-1 传统应用多多应用程序 示意图

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

  ●谁控制谁,控制什么传统Java SE多多应用程序 设计,亲戚亲戚大伙儿直接在对象实物通过new进行创建对象,是多多应用程序 主动去创建依赖对象;而IoC是有专门一一俩个 容器来创建什么对象,即由Ioc容器来控制对 象的创建;谁控制谁?当然是IoC 容器控制了对象;控制什么?那太大主要控制了实物资源获取(不需要多对象包括比如文件等)

  IoC的一一俩个 重点是在系统运行中,动态的向某个对象提供它所可不能不能的这些对象。这些点是通过DI(Dependency Injection,依赖注入)来实现的。比如对象A可不能不能操作数据库,之后亲戚亲戚大伙儿一个劲要在A中个人编写代码来获得一一俩个 Connection对象,有了 spring亲戚亲戚大伙儿就只可不能不能告诉spring,A中可不能不能一一俩个 Connection,至于这些Connection为啥构造,多会儿构造,A可不能不能 知道。在系统运行时,spring会在适当的之后制造一一俩个 Connection,太大像打针一样,注射到A当中,太大就完成了对各个对象之间关系的控制。A可不能不能依赖 Connection可不能不能正常运行,而这些Connection是由spring注入到A中的,依赖注入的名字就没有来的。没有DI是怎么实现的呢? Java 1.3之后一一俩个 重要价值形式是反射(reflection),它允许多多应用程序 在运行的之后动态的生成对象、执行对象的最好的法律土办法、改变对象的属性,spring太大通过反射来实现注入的。

  在平时的java应用开发中,亲戚亲戚大伙儿要实现某一一俩个 功能之后说是完成某个业务逻辑时大概可不能不能一一俩个 或以上的对象来合作协议完成,在没有使用Spring的之后,每个对象在可不能不能使用他的合作协议对象时,个人均要使用像new object() 太大的语法来将合作协议对象创建出来,这些合作协议对象是由个人主动创建出来的,创建合作协议对象的主动权在个人手上,个人可不能不能哪个合作协议对象,就主动去创建,创建合作协议对象的主动权和创建时机是由个人把控的,而太大就会使得对象间的耦合度高了,A对象可不能不能使用合作协议对象B来共同完成一件事,A要使用B,没有A就对B产生了依赖,之后多A和B之间发生并都在耦合关系,太大是紧密耦合在共同,而使用了Spring之后就不一样了,创建合作协议对象B的工作是由Spring来做的,Spring创建好B对象,太大存储到一一俩个 容器上边,当A对象可不能不能使用B对象时,Spring就从存放对象的那个容器上边取出A要使用的那个B对象,太大交给A对象使用,至于Spring是怎么创建那个对象,以及什么之后创建好对象的,A对象可不能不能 关心什么细节大问提(这些之后生的,为啥生出来的我可不关心,能让人要干活就行),A得到Spring给亲戚亲戚大伙儿的对象之后,一一俩个 人共同合作协议完成要完成的工作即可。