依赖注入及AOP简述(四)——“好莱坞原则”和依赖注入框架简介 .
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简述(四)——“好莱坞原则”和依赖注入框架简介 .的更多相关文章
- 依赖注入及AOP简述(十二)——依赖注入对象的行为增强(AOP) .
四.依赖注入对象的行为增强(AOP) 前面讲到,依赖注入框架的最鲜明的特点就是能够提供受容器管理的依赖对象,并且可以对对象提供行为增强(AOP)功能,所以这一章我们来讨论有关AOP的话题. 1. ...
- 依赖注入及AOP简述(三)——依赖注入的原理
3. “依赖注入”登场 于是诸多优秀的IT工程师开始想出了更加轻量便利.更加具有可测试性和可维护性的设计模式——IoC模式.IoC,即Inversion of Control的缩写,中文里被称 ...
- 依赖注入及AOP简述(七)——FQCN请求模式
2.2. FQCN请求模式 为了弥补纯字符串请求模式中的类型安全问题,全类名(FQCN)请求模式就应运而生了.其思想便是,在向容器请求依赖对象的时候,不是通过字符串的标识符.而是通过被请求的依赖 ...
- 依赖注入及AOP简述(五)——依赖注入的方式 .
二.依赖注入的应用模式 前面我们了解了依赖注入的基本概念,也对一些依赖注入框架进行了简单的介绍,这一章我们主要来讨论作为开发者如何利用依赖注入框架来实现依赖注入的设计思想. 1. 依赖注入的方 ...
- 依赖注入及AOP简述(一)——“依赖”的概念 .
一.入门:依赖注入 作为一种全新的设计模式理念,“依赖注入”这个词汇在软件设计开发中已经是越来越耳熟能详了,而各种流行于开源社区的“依赖注入框架”,也越来越多的被当作软件工程开发过程中使用的基础框架. ...
- 依赖注入及AOP简述(六)——字符串请求模式 .
2. 依赖注入对象的请求模式 前一节我们讨论了关于声明注入点的几种方法,这一节主要来介绍在注入点上如何定位到所需要的标识符的话题.基本上,我们可以用字符串为标识符来请求依赖对象.或者用全类名( ...
- 依赖注入及AOP简述(十三)——AOP应用举例(完结) .
2. AOP应用举例 在一般的应用程序开发中,有一些典型的AOP应用,使得开发者可以专注于业务逻辑本身,而不是与之完全无关的一些“方面”. l 首先就是关于前面介绍过的日志输出类 ...
- 依赖注入及AOP简述(十)——Web开发中常用Scope简介 .
1.2. Web开发中常用Scope简介 这里主要介绍基于Servlet的Web开发中常用的Scope. l 第一个比较常用的就是Application级Scope,通常我们会将一 ...
- 依赖注入及AOP简述(九)——单例和无状态Scope .
三.依赖注入对象的Scope及其生命周期 在前面的章节我们讲到,依赖注入容器之所以能够区别于以往的ServiceLocator等容器,是在于其不但能够自动构建多层次的.完整的依赖关系图,并且可以管理依 ...
随机推荐
- Gradle+Jetty实现静态资源的热部署
本文转自http://www.cnblogs.com/huang0925/p/3302487.html --------------------------------------- 通过Gradle ...
- 一个人的旅行(floyd+dijskra+SPFA+Bellman)
一个人的旅行 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- 为net-snmp添加读readTimeTicks
function readTimeTicks(time){ if(time === 0) return ''; var d = 0, h = 0, m = 0, s = 0; d = parseInt ...
- Android studio教程:[4]真机测试
有了Android studio这么好用的软件,自然要有一部不错的安卓手机,然后在真机上测试自己的程序,那样才能更好的发现程序中存在的问题,毕竟模拟器不是真正的手机嘛. 工具/原料 Android s ...
- vs2010 中检测到有潜在危险的 Request.Form 值
解决方法 : 一般在网上搜只有以下两种处理方式: 1.在报错的页面前吧<%Page%>标签中增加validateRequest="false"的属性为false 如下所 ...
- CAShapeLayer + UIBezierPath
UIBezierPath: UIBezierPath是在 UIKit 中的一个类,继承于NSObject,可以创建基于矢量的路径.使用此类可以定义常见的圆形.多边形等形状 .我们使用直线.弧(arc) ...
- 三维扫描 FZU 1063
Description 工业和医学上经常要用到一种诊断技术——核磁共振成像(Magnetic Resonance Imagers).利用该技术可以对三维物体(例如大脑)进行扫描.扫描的结果用一个三维的 ...
- windows系统部署discuz并和javaweb账号连通同步
一.Discuz安装说明 1.安装wamp集成环境 (1)下载wampserver集成环境 网址:(http://wampserver-64bit.en.softonic.com)或百度搜索下载 (2 ...
- windows中path环境变量即时生效
修改PATH后,打来CMD命令行,输入 “set PATH=C” (不会真的改变PATH变量值,但会重新读取一次PATH值),关掉CMD窗口再打开.OK 不放心可以 echo %PATH% 检视一下.
- UVA 816 Abbott’s Revenge
bfs求最短路,递归打印最短路的具体路径: 难点: 当前状态和转弯方式很复杂,要仔细处理: 递归打印:用一个数组存储路径中结点的前一个节点,递归查找 (bfs无法确定下一个结点,但对于没一个结点,它的 ...