`

[#0x002E] 依赖、依赖注入以及控制反转

阅读更多

1. 何为依赖

  不管是面向对象,还是面向过程,一个应用总会分成许多的模块,然后由这些模块协同工作完成任务。要协同工作就会产生依赖,如一个方法调用另一个方法、一个对象包含另一个对象,这些都是依赖关系。 
  比如:类A要包含对象b的话,就需要在A里B b =  new B(),这里明显是类A依赖对象b(因为怎么看都不像是对象b依赖类A……)

 

2. 何为依赖注入

  I have to say, the translation sucks! I'd rather use 'Dependency Injection' or 'DI' instead.

 

  所谓DI,就是由容器动态的生成依赖关系,应用可以方便的获取依赖(通俗地说就是类A不用再亲自B b = new B()来获取b对象)。从外表上看,就好像是容器将生成的依赖关系注入到应用之中。

 

3. DI的3种实现方式

  • Interface Injection: 类A里不是用对象b,而是接口IB的实现ib,ib由外部创建并传入类A,类A不负责创建工作,如:
public class A 
{
	private InterfaceB ib;
	
	public Object doSomething(InterfaceB impB) 
	{
		ib = impB;

		return ib.doIt();
	}
}

 

 最典型的例子的是doGet()、doPost()方法:

public class HelloServlet extends HttpServlet
{
	public void doGet(HttpServletRequest req, HttpServletResponse resp) 
		throws IOException
	{...}
}

 这里要注意的是,HttpServletRequest、HttpServletResponse都是接口,不要再当成是对象了。

 

  • Setter Injection: 容器使用默认构造器来B b = new B(),再使用类B的Setter来修改b,再将b注入类A。如Spring中bean.xml的段
<bean id="TheAction" class="org.sklse.spring.UpperAction">
	<property name="message">
		<value>HeLLo</value>
	</property>
</bean>

 就指定了调用UpperAction的setMessage("HeLLo")。

 

  • Constructor Injection: 与Setter Injection相对,Construction Injection就是不使用Setter,而是使用带参构造器来创建对象b。且不允许应用调用类B的Setter(可以根本不提供Setter给应用)。与Setter Injection相比,Constructor Injection创建对象b比较方便(Setter Injection要逐个域来Set),且保持了对象b的一致性,但不如Setter Injection来得灵活。


4. 控制反转

  I have to say it again, the translation sucks! I'd rather use 'IoC' instead.

 

  控制反转,IoC,Inversion of Control,实为“控制的反转”,差一个字理解就差这么远。

  IoC,用白话来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。

分享到:
评论

相关推荐

    WINDOWS消息一览表

    - **值**:`0x002E` - **用途**:用于将键盘输入转换为列表框中的项索引。 #### WM_KEYDOWN – 键盘按下 - **值**:`0x0100` - **用途**:当键盘按键被按下时发送此消息。 #### WM_CHARTOITEM – 将字符转换为项...

    VC++中的所有WM消息.doc

    #### WM_NULL (0x0000) - **定义**: 表示无任何操作的空消息。 - **应用场景**: 通常用于测试或作为消息循环中的占位符。 #### WM_CREATE (0x0001) - **定义**: 当一个窗口首次被创建时,系统会向该窗口发送`WM_...

    电脑故障以及解决+百科全书+-+WINDOWS错误代码大全.doc

    - **错误代码0x002E**:文件系统错误,可能需要修复。 - **错误代码0x0032**:不支持的网络请求,可能是协议不匹配或设置问题。 - **错误代码0x003F**:等待打印的文件已被删除。 - **错误代码0x0041**:拒绝访问...

    MSP430寄存器中文注释

    根据提供的信息,我们可以详细解析MSP430微控制器中关于P1/2、P3/4以及P5/6端口的相关寄存器及其功能。MSP430是德州仪器(TI)推出的一款超低功耗16位RISC架构微控制器,广泛应用于各种嵌入式系统设计中。在MSP430...

    MSP430寄存器的一些注释,带中文解释。熟知这些写起程序来很方便

    它以其极低的功耗、广泛的电源电压范围以及丰富的外设资源而著称,在工业控制、汽车电子、消费类电子产品等领域有着广泛的应用。在MSP430微控制器的设计中,寄存器的使用对于编程至关重要。本文将详细介绍MSP430中的...

    Windows消息大全

    39. WM_VKEYTOITEM (0x002E):ListBox或ComboBox响应键盘事件时发送。 这些消息是Windows消息系统的核心,它们在应用程序中起到关键作用,确保了用户界面的响应性和一致性。开发者可以通过捕获并处理这些消息来实现...

    MSP430寄存器注释

    - **寄存器地址**:`0x0026` (P1SEL) 和 `0x002E` (P2SEL) - **功能**:用于选择P1或P2端口引脚的功能。 - **使用场景**:当需要将某些引脚配置为特殊功能(如ADC输入或串行通信)时使用。 ### 总结 通过以上介绍...

    windows消息大全(20211010103557).pdf

    WM_VKEYTOITEM(0x002E):将虚拟键映射到列表框或组合框中一个项目。 WM_CHARTOITEM(0x002F):将字符映射到列表框或组合框中一个项目。 WM_SETFONT(0x0030):设置控件字体。 WM_GETFONT(0x0031):获取控件字体。 ...

    AEC-Q100-002E:2013人体模型(HBM) 静电放电(ESD)测试 - 完整英文电子版(7页)

    完整英文电子版 AEC-Q100-002E:2013 Human Body Model (HBM) Electrostatic Discharge(ESD) Test(人体模型(HBM) 静电放电(ESD)测试)。对符合 AEC Q100 标准的集成电路器件进行的所有 HBM 测试均应符合 ANSI/E...

    AEC Q100-002E.pdf

    《AEC Q100-002E.pdf》文档主要关注的是汽车电子行业的组件技术标准,特别是关于人体模型静电放电(Human Body Model, HBM)测试的标准。AEC,即Automotive Electronics Council(汽车电子委员会),是一个由汽车...

    windows编程常用命令

    - **`WM_VKEYTOITEM` (0x002E)**:处理与键盘输入相关的列表选择。 这些消息覆盖了Windows应用程序生命周期的各个方面,从创建到销毁,以及期间的各种状态变化。掌握这些消息的使用,对于开发高效、响应迅速的...

    AEC-Q100-002E:2013 Human Body Model (HBM) Electrostatic Discharg

    AEC-Q100-002E标准的内容包括测试程序、设备设置、测试环境条件、以及合格/不合格的判断标准。测试程序详细描述了如何正确连接被测器件,如何施加静电脉冲,以及如何记录和分析结果。设备设置部分明确了测试仪器的...

    蓝屏代码及解决方法.docx

    46. 0x002E:磁盘驱动器找不到要求的磁盘驱动器。解决方法:检查磁盘驱动器是否正确,确保磁盘驱动器是否被安装。 47. 0x002F:磁盘驱动器找不到要求的磁盘驱动器。解决方法:检查磁盘驱动器是否正确,确保磁盘驱动...

    程序BDE错误码对照表

    0x002E(46) - QueryProcessor** - **描述**:查询处理器。 - **解决方法**:如果出现查询处理器相关的错误,检查SQL语句是否正确编写。 **15. 0x002F(47) - VersionMismatch** - **描述**:版本不匹配。 - **解决...

    WM消息大全

    - **消息值**: `0x002E` - **说明**: 此消息由具有`LBS_WANTKEYBOARDINPUT`样式的列表框发送给它的所有者来响应`WM_KEYDOWN`消息。这可以用来处理键盘输入。 39. **`WM_CHARTOITEM`** - **消息值**: `0x002F` ...

    Window 消息大全使用详解

    消息是通过一个结构体`TMsg`传递的,其中包含了窗口句柄(`hwnd`)、消息标识(`message`)、参数(`wParam`和`lParam`)、时间戳(`time`)以及消息发生时的鼠标位置(`pt`)。下面,我们将详细解析一系列常见的...

    迅达300P故障代码

    002E ExceptionMC **故障描述**:运行控制异常。 - **可能原因**: - EMC问题:电磁兼容性问题,24V电源电缆与高压电缆未正确隔离。 - 有瑕疵的PCB:控制板存在缺陷。 - **解决方法**: - 检查EMC来源及24V电源...

    Windows 消息大全使用详解

    - **用途**:控制窗口是否可以重绘。 - **参数**:`wParam`为TRUE或FALSE,指示是否允许重绘。 ##### WM_SETTEXT ($000C) - **用途**:设置窗口的文本。 - **参数**:`lParam`包含指向新文本字符串的指针。 #####...

Global site tag (gtag.js) - Google Analytics