Inversion of control(dependency injection)模式

本文深入探讨了控制反转的概念及其在软件设计中的应用,详细解释了如何通过依赖注入技术来减少代码耦合,提高测试性和维护性。通过引入接口和改造类结构,实现了对象之间的松耦合,展现了面向对象编程的精髓。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘自wiki pedia http://zh.wikipedia.org/zh/%E6%8E%A7%E5%88%B6%E5%8F%8D%E8%BD%AC

 

起源

早在2004年,Martin Fowler就提出了“哪些方面的控制被反转了?”这个问题。他总结出是依赖对象的获得被反转了。基于这个结论,他为控制反转创造了一个更好的名字:依赖注入。许多非凡的应用(比HelloWorld.java更加优美,更加复杂)都是由两个或是更多的类通过彼此的合作来实现业务逻辑,这使得每个对象都需要,与其合作的对象(也就是它所依赖的对象)的引用。如果这个获取过程要靠自身实现,那么如你所见,这将导致代码高度耦合并且难以测试。

IoC 亦称为 「依賴倒置原理」("Dependency Inversion Principle") (Martin 2002:127)。差不多所有框架都使用了「倒置注入(Fowler 2004)技巧,這可說是IoC原理的一項應用。SmallTalkC++Java 或各種.NET 語言等面向對象程序語言的程序員已使用了這些原理。

控制反转是Spring Framework的核心。

应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用,传递给它。也可以说,依赖被注入到对象中。所以,控制反转是,关于一个对象如何获取它所依赖的对象的引用,这个责任的反转

术语

Class X 依賴于 class Y 只在如下狀況中成立:

  • X 擁有 Y 的控制並且在 X 中使用 Y
  • X 是 Y 的派生物
  • X 依賴于 Z,而 Z 又依賴于 Y (transitivity)

X 依賴于 Y 並不表示 Y 也依賴于 X。但如果 X 和 Y 同時依賴于對方,這種依賴性被稱作 循環依賴:這時,X 無法和 Y 分開單獨使用,反之亦然。如果在一個面對對象程式中擁有太多的循環依賴,這可能表示這個程式是個欠佳的設計。

打破依赖

如果类X的一个实例对象x调用了类Y的一个实例对象y的方法,那么就称类X依赖于类Y。为了打破这种依赖——“反转”,首先我们可以引入一个接口I(第三方类),接口I中声明了对象y将被对象x调用的所有方法;然后,我们对类Y稍加改造,使其实现接口I;最后,我们把在对象x中对y的调用改为对接口I中对应方法的调用。经过这番改造后,原先的X对Y的依赖关系不存在了,类X和Y现在都依赖于接口I。

这种通过引入接口I来消除类X对Y的依赖的方法,被称作“控制反转”,又叫做“依赖注入”。

需要注意的是,类Y可能还依赖于其他类。在应用反转之前,X依赖于Y,从而也间接依赖于Y所依赖的所有“其他类”。应用控制反转之后,不仅X对Y的直接依赖,且前面提到的那些所有的间接依赖也消除了。而新引入的接口I则不依赖于任何类。

IoC 的類型

Martin Fowler 將 IoC 分成三類。

  • Type 1 : 基於interface (interface injection)。Depending object 需要實作(implement) 特定 interface 以供框架注入所需物件。
  • Type 2 : 基於setter (setter injection)。Depending object 需要實現特定 setter 方法 (但不需要依賴特定interface),
  • Type 3 : 基於constructor (constructor injection)

有的框架,如Plexus 提出Type 4 IoC,以field為基礎,惟此法到目前為止尚未被廣泛接納。[1]

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值