3.2.    “好莱坞原则”

看了前面关于依赖注入概念的描述,我们来提炼出依赖注入的核心思想。如果说传统的组件间耦合方式,例如new、工厂模式等,是一种由开发者主动去构建依赖对象的话,那么依赖注入模式则是其反向的,即被动地等待别人做好一个依赖对象提供给我。

在美国好莱坞众多电影工厂在寻找演员的时候通常奉行着这么一个原则:不要找我,需要的时候我去找你(“Don’tcall us; we’ll call you!”),把相同的思路运用到我们的软件工程里通常也被称作“好莱坞原则”(HollywoodPrinciple),即告诉开发者不要主动去构建依赖对象,而是在需要的时候由依赖注入容器把对象提供过来。

这种思路与以前的new、工厂创建等方式是正好相反的思想,因此在最开始这样的思想会被称为“控制反转(IoC)”。从这我们也可以看到,依赖注入的核心思想就是:由容器提供给我们需要的依赖对象。

3.3.    依赖注入框架简介

这一节我们简单介绍一下Java世界里都有哪些依赖注入框架,包括在3.1节我们多次提到的JBoss Seam、Spring Framework、Google Guice等。

依赖注入思想开始流行以来,Java世界里已经诞生了很多种依赖注入框架。其中,ApacheAvalon被认为是最早出现的依赖注入框架,之后很多的Apache工程都是基于这个框架实现的,但由于其功能限制比较多,如今已经逐渐退出了历史舞台。此后又诞生了许多像PicoContainer、NanoContainer、ApacheHivemind等依赖注入框架,也有诸如SmartyPants-IoC这样专门面向Adobe Flex和Flash应用程序开发的依赖注入框架。

但是依赖注入只是面向对象语言中以改进组件耦合方式为核心的一种开发思想,而开发一个完整IT系统需要涉及很多的开发领域,比如表现层开发、逻辑层开发、持久化层开发等等,因此开发者迫切需要一个基于依赖注入思想的覆盖全开发领域(full-stack)的框架。2003年Spring Framework的诞生宣告着这种基于依赖注入思想的full-stack开发框架开始占据主流。

Spring无疑是覆盖全开发领域的依赖注入框架的成功典范,甚至在诞生之初被当作依赖注入的代名词,至今仍是使用者最广泛、社区成员最多的框架。不过随着其复杂XML配置、对象生命周期管理等的复杂性、开发Spring插件过程中对该框架的强依赖性等原因,以著名Java工程师、Hibernate的创始人Gaving King为核心的开发团队在2005年开发出了JBoss Seam框架,其也迅速地发展成为主流依赖注入开发框架之一。而在2007年,Google的著名Java工程师Bob Lee开发出了全新的基于Java5注解和Java EDSL配置的依赖注入开发框架Google Guice,解决了之前的框架中最常见的类型安全等问题,在如今的依赖注入框架世界里亦占有一席之地。大家熟知的Gmail邮件系统的前端服务,就是一个完全基于Guice开发的系统。

近年来随着Spring、Seam、Guice这三大主流开发框架的竞争与发展,各自取长补短,在其各自的最新版release当中很多主要功能的设计模式和使用方式上都已渐渐趋同。因此JCP组织提取了各方的优点,提出了JSR-299和JSR-330两个新的标准,正式将依赖注入列为JavaEE6的标准,即Contextualand Dependency Injection。今后所有宣称实现JavaEE6的中间件厂商,都要遵循这个标准提供依赖注入的实现。

依赖注入及AOP简述(四)——“好莱坞原则”和依赖注入框架简介 .的更多相关文章

  1. 依赖注入及AOP简述(十二)——依赖注入对象的行为增强(AOP) .

    四.依赖注入对象的行为增强(AOP) 前面讲到,依赖注入框架的最鲜明的特点就是能够提供受容器管理的依赖对象,并且可以对对象提供行为增强(AOP)功能,所以这一章我们来讨论有关AOP的话题. 1.    ...

  2. 依赖注入及AOP简述(三)——依赖注入的原理

    3.     “依赖注入”登场 于是诸多优秀的IT工程师开始想出了更加轻量便利.更加具有可测试性和可维护性的设计模式——IoC模式.IoC,即Inversion of Control的缩写,中文里被称 ...

  3. 依赖注入及AOP简述(七)——FQCN请求模式

    2.2.    FQCN请求模式 为了弥补纯字符串请求模式中的类型安全问题,全类名(FQCN)请求模式就应运而生了.其思想便是,在向容器请求依赖对象的时候,不是通过字符串的标识符.而是通过被请求的依赖 ...

  4. 依赖注入及AOP简述(五)——依赖注入的方式 .

    二.依赖注入的应用模式 前面我们了解了依赖注入的基本概念,也对一些依赖注入框架进行了简单的介绍,这一章我们主要来讨论作为开发者如何利用依赖注入框架来实现依赖注入的设计思想. 1.     依赖注入的方 ...

  5. 依赖注入及AOP简述(一)——“依赖”的概念 .

    一.入门:依赖注入 作为一种全新的设计模式理念,“依赖注入”这个词汇在软件设计开发中已经是越来越耳熟能详了,而各种流行于开源社区的“依赖注入框架”,也越来越多的被当作软件工程开发过程中使用的基础框架. ...

  6. 依赖注入及AOP简述(六)——字符串请求模式 .

    2.     依赖注入对象的请求模式 前一节我们讨论了关于声明注入点的几种方法,这一节主要来介绍在注入点上如何定位到所需要的标识符的话题.基本上,我们可以用字符串为标识符来请求依赖对象.或者用全类名( ...

  7. 依赖注入及AOP简述(十三)——AOP应用举例(完结) .

    2.     AOP应用举例 在一般的应用程序开发中,有一些典型的AOP应用,使得开发者可以专注于业务逻辑本身,而不是与之完全无关的一些“方面”. l        首先就是关于前面介绍过的日志输出类 ...

  8. 依赖注入及AOP简述(十)——Web开发中常用Scope简介 .

    1.2.    Web开发中常用Scope简介 这里主要介绍基于Servlet的Web开发中常用的Scope. l        第一个比较常用的就是Application级Scope,通常我们会将一 ...

  9. 依赖注入及AOP简述(九)——单例和无状态Scope .

    三.依赖注入对象的Scope及其生命周期 在前面的章节我们讲到,依赖注入容器之所以能够区别于以往的ServiceLocator等容器,是在于其不但能够自动构建多层次的.完整的依赖关系图,并且可以管理依 ...

随机推荐

  1. BorderLayout布局,修改各个区域大小办法

    摘自http://blog.csdn.net/zcsearching/article/details/50808446 BorderLayout控件大小的设置 使用BorderLayout时,中间的面 ...

  2. Zookeeper 2、Zookeeper的安装和配置(集群模式)

    1.下载与解压 Zookeeper下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper/ 下载完成以后解压到一个特定目录 同步时间所有节点的时间,并关 ...

  3. HDU-1016-素数环

    /* 将1-n个数放在环中,保证相邻的两个数的和是素数 第一个数字永远是1 就这两个约束条件 第一个难点是计算素数: 参考文献: http://c.biancheng.net/cpp/html/254 ...

  4. 带你走近AngularJS - 创建自己定义指令

    带你走近AngularJS系列: 带你走近AngularJS - 基本功能介绍 带你走近AngularJS - 体验指令实例 带你走近AngularJS - 创建自己定义指令 ------------ ...

  5. CF 338 D GCD Table(CRT)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 给定一个序列,a[1 ..k],问是否存在(i , ...

  6. mysql sql limit where having order

    SQL语句执行顺序及MySQL中limit的用法 . 分类: MySql2013-09-02 09:1315人阅读评论(0)收藏举报 写的顺序:select ... from... where.... ...

  7. LeetCode OJ平台上Maximum Subarray题目O(n)复杂度解决方式

    原始题目例如以下,意为寻找数组和最大的子串,返回这个最大和就可以. Find the contiguous subarray within an array (containing at least ...

  8. [jquery] 图片热区随图片大小自由缩放

    在图片上直接画出带超级链接热区元素map和area相信大家并不陌生,Dreamweaver等网页制作软件都有直接在图片上绘制带超级链接的热区工具,但是直接绘制的热区是不能随着图片自适应放大和缩小的,现 ...

  9. 纯Html+Ajax和JSP两者对比的个人理解

    最近写个人web,用jsp+servlet做,突然想到一个问题:html+ajax似乎和jsp实现效果一样:那么,两者到底有什么区别呢? 这里参考老猿的一段话: 全站ajax会维护大量的js代码,如何 ...

  10. Uva 10652 Board Wrapping(计算几何之凸包+点旋转)

    题目大意:给出平面上许多矩形的中心点和倾斜角度,计算这些矩形面积占这个矩形点形成的最大凸包的面积比. 算法:GRAHAM,ANDREW. 题目非常的简单,就是裸的凸包 + 点旋转.这题自己不会的地方就 ...