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. mysql的主从复制配置

    怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下: 1.主从服务器分别作以下操作:  1.1.版本一致  1.2.初始化表,并在后台启动mysql  1.3.修改root的密码 2.修 ...

  2. flappy bird游戏源代码揭秘和下载

    转:http://blog.csdn.net/touchsnow/article/details/19071961 背景: 最近火爆全球的游戏flappy bird让笔者叹为观止,于是花了一天的时间山 ...

  3. docker 实战---使用oracle xe作为开发数据库(六)

    oracle作为oltp的大佬,非常多行业应用都会用到它.那么在开发的过程中就不可避免的要使用oracle数据库,oracle数据库的版本号有好多,当中express版本号是免费的开发版.它的主要限制 ...

  4. 简述uwsgi使用一个服务启动多个文件的用法

    [场景篇] 为了节省端口的占用,将N个flask应用服务——每个对应一个文件(web.py.django也一样)合并为一个端口服务来启用 [寻思篇] 通常的做法:每个文件配置一个xml 或者 ini文 ...

  5. Sublime Text插件FileHeader实践

    FileHeader是一个文件模板插件,可以定制各种文件模板和文件头部信息,保存时可以自动更新文件的修改时间.在多人开发中这个功能相当实用. 具体介绍我就不细说了,主要是分享一下在使用FileHead ...

  6. MVC 笔记(二)

    HttpUtility.HtmlEncode来预处理用户输入,这能阻止用户向视图中用链接注入js代码或html标记 .[Required]:非空验证 .[StringLength(**)]:设置字符的 ...

  7. SQLServer服务器数据库之间的数据操作(完整版)

    分类: 数据库开发技术 ---------------------------------------------------------------------------------- -- Au ...

  8. C# 中的常用正则表达式大全

       这是从网上找来的,收藏一下备用,用到之处可以节省不少时间哦! 只能输入数字: "^[0-9]*$" . 只能输入n位的数字:"^\d{n}$". 只能输入 ...

  9. java 包之 BeanUtils包的使用

    BeanUtils工具包是由Apache公司所开发,主要是方便程序员对Bean类能够进行简便的操作. 在使用BeanUtils工具包之前我们需要的Jar包有以下几种: (1)   BeanUtils相 ...

  10. php中Maximum execution time of 120 seconds exceeded时间超时错误解决方案

    1.修改php的配置文件,找到php.ini文件 max_execution_time = 120 ;//设置成你想要的值,单位是秒 2.使用ini_set()函数,使用这个函数来改变你的最大执行时间 ...