依赖注入及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等容器,是在于其不但能够自动构建多层次的.完整的依赖关系图,并且可以管理依 ...
随机推荐
- myeclipse集成weblogicserver
今天为了学一下JMS的东东, 不得不安装个weblogicserver, 下面是详细的安装步骤: 1. 首先去官网下载一个weblogic: 下载地址: http://download.oracle. ...
- 第一个MyBatis程序
最近研究了一些MyBatis技术,虽然工作中还未用到,但是觉得了解一下也是不错的.这里记录了第一个简单的Demo程序,防止自己忘记. 第一步需要配置Mybatis-config.xml文件.注意:这里 ...
- SyntaxError: Non-ASCII character '\xe2' in file 编码错误
Editing .py file in the Notepad: But when run in the PowerShell, I found the follwing error: It seem ...
- NULL & nil & Nil & NSNULL的区别
nil 是 OC 的,空对象,地址指向 空(0) 的对象 在 OC 中,可以给空对象发送任何消息,不会出现错误 NULL 是 C 的,空地址,地址的数值是 0,是一个长整数 表示地址是空 NSNull ...
- MVC思想架构的简单自定义UITableViewCell
在iOS的开发过程中,架构思想是很重要的一部分,目前的主流应该分为MVC与MVVM两种,在这里不做过多的区分,有兴趣的同学可以看看唐巧大神的一篇文章<被误解的MVC和被神化的MVVM& ...
- 【IOS学习基础】weak和strong、懒加载、循环引用
一.weak和strong 1.理解 刚开始学UI的时候,对于weak和strong的描述看得最多的就是“由ARC引入,weak相当于OC中的assign,但是weak用于修饰对象,但是他们都不会造成 ...
- MVC和传统的以模板为中心的web架构比较
特性 以模板为中心 MVC架构 页面产生方式 运行并替换标签中的语句 由模板引擎生产HTML页面 路径解析 映射到文件系统路径,也可以通过rewrite等技术来重定向 由控制器定义,并可以通过路由系统 ...
- java之集合类框架的简要知识点:泛型的类型擦除
这里想说一下在集合框架前需要理解的小知识点,也是个人的肤浅理解,不知道理解的正不正确,请大家多多指教.这里必须谈一下java的泛型,因为它们联系紧密,我们先看一下这几行代码: Class c1 = n ...
- PHP扩展开发之简单类开发
接下来我们要用扩展的形式实现以下类(演示环境:linux.php-5.5.34-src) <?php class Person { private $_name; public function ...
- Github获取仓库最新Release版本号API
package me.chunsheng.hongbao.utils; import android.content.Context; import android.content.Intent; i ...