Spring的IoC控制反转与DI依赖注入详解.docVIP

  • 1
  • 0
  • 约1.04万字
  • 约 10页
  • 2019-09-16 发布于江西
  • 举报
Spring的IoC控制反转与DI依赖注入详解 文章分类: Java编程 ??? 学习Spring,所有教程都是从IoC和DI开始的,但是大部分教程对它们的介绍都很抽象,要是之前没系统的学习过设计模式的话理解起来就非常吃力。所以在这里我尽我的能力来解释这两个概念。 首先的重点,IoC并不是Spring特有的,它是一种设计模式,事实上只要掌握了原理,自己也可以写出一个IoC的实现方法。 一、DI(Dependency Injection)依赖注入可以称为IoC(Inversion of Control)控制反转,但是IoC不等于就是DI ??? 这一点是很多初学者很容易产生错误的一个概念,因为很多教程都把DI和IoC放在一起说,就像堆和堆栈一样,容易让初学者以为他们就是同一个东西,这个是需要纠正的。 ??? 简单的解释,就是IoC包括了DI,但是IoC还包括了另外一个叫做DL(Dependency Lookup)依赖查找的功能。你可以先简单的把IoC当作是某种操作,DI是这种操作的写入方式,而DL是查找方式,这样可能容易区分一点。 ??? DL之所以很少有人提起,是因为我们平时很少用到,所以也就慢慢被遗忘了,但是这也不代表它就不存在了。可惜我自己也对DL没有去花时间了解,只是知道有这么个东西,所以在这暂时也没法去详细介绍了,如果有高手的话请指点一下! 二、什么叫做IoC(Inversion of Control)控制反转 ??? 这一段是纯理论的介绍,从别的地方直接抄过来的,先看一遍,不懂也没关系,下面我会举例来说明: 引用 什么是Inversion of Control ??????? 控制反转。在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制。这称为控制反转。 IoC的原理 ??????? 不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器负责将这些联系在一起。其原理是基于OO设计原则的The Holly wood Principle:Dont call us, well call you(别找我,我会来找你的)。也就是说,所有的组件都是被动的(Passive),所有的组件初始化和调用都由容器负责。组件处在一个容器当中,由容器负责管理。简单的来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,这就是反转。 ???? 如果你只需要看这段文字介绍就能理解什么叫IoC了,那下面的那些也就不用看了,大侠! ???? 如果你也跟我一样属于笨的那种,那么可以看一下我下面的介绍: 我们沿用之前的HelloWorld的例子来介绍IoC。 假设我要跟我们家的邻居去打招呼,但是我又懒得出门,所以我干脆造了一个机器人代替我去打招呼了(这得要多宅的一个人啊! 宁可造个机器人也不想出个门)。 1、首先我们传统的编程方式是这样的: 先建立一个Robot类,然后类里面实现一个喊话的方法,然后实现方法里创建一个机器人的实例来调用喊话: Robot类: Java代码 ? \o 收藏这段代码 package?com.iteye.bolide74.action; ?? ?? public?class?Robot?{ ?? ????public?String?name; ?? ????public?String?color; ?? ????public?double?height; ?? ????public?double?width; ?? ????public?double?weight; ?? ?? ????public?Robot(String?name,?String?color,?double?height,?double?width, ?? ????????????double?weight)?{ ?? ?????????=?name; ?? ????????this.color?=?color; ?? ????????this.height?=?height; ?? ????????this.width?=?width; ?? ????????this.weight?=?weight; ?? ????} ?? ?? ????public?void?Speak(String?msg)?{ ?? ????????System.out.println(msg); ?? ????} ?? }?? 实现类: Java代码 ? \o 收藏这段代码 package?com.iteye.b

文档评论(0)

1亿VIP精品文档

相关文档