从注入方法上看,主要可以划分为三种类型:构造函数注入、属性注入和接口注入。
Spring 支持构造函数注入和属性注入。下面我们继续使用以上的例子说明这三种注入方法
的区别。
1. 构造函数注入
在构造函数注入中,我们通过调用类的构造函数,将接口实现类通过构造函数变量传
入,如代码清单3-3 所示:
代码清单 3-3 MoAttack:通过构造函数注入革离扮演者
public class MoAttack { //此类表示剧本
private GeLi geli;
//①注入革离的具体扮演者
public MoAttack(GeLi geli){
this.geli = geli;
}
public void cityGateAsk(){
geli.responseAsk("墨者革离!");
}
}
MoAttack 的构造函数不关心具体是谁扮演革离这个角色,只要在①处传入的扮演者按
剧本要求完成相应的表演即可。角色的具体扮演者由导演来安排,如代码清单3-4 所示:
代码清单 3-4 Director:通过构造函数注入革离扮演者
public class Director {
public void direct(){
//①指定角色的扮演者
GeLi geli = new LiuDeHua();
//②注入具体扮演者到剧本中
MoAttack moAttack = new MoAttack(geli);
moAttack.cityGateAsk();
}
}
在①处,导演安排刘德华饰演革离的角色,并在②处,将刘德华“注入”到墨攻的剧
本中,然后开始“城门叩问”剧情的演出工作。
2. 属性注入
有时,导演会发现,虽然革离是影片《墨攻》的第一主角,但并非每个场景都需要革
离的出现,在这种情况下通过构造函数注入并不妥当,这时可以考虑使用属性注入。属性
注入可以有选择地通过Setter 方法完成调用类所需依赖的注入,更加灵活方便:
代码清单 3-5 MoAttack:通过Setter 方法注入革离扮演者
public class MoAttack {
private GeLi geli;
//①属性注入方法
public void setGeli(GeLi geli) {
this.geli = geli;
}
public void cityGateAsk() {
geli.responseAsk("墨者革离");
}
}
MoAttack 在①处为geli 属性提供一个Setter 方法,以便让导演在需要时注入geli 的具
体扮演者。
代码清单 3-6 Director:通过Setter 方法注入革离扮演者
public class Director {
public void direct(){
GeLi geli = new LiuDeHua();
MoAttack moAttack = new MoAttack();
//①调用属性Setter方法注入
moAttack.setGeli(geli);
moAttack.cityGateAsk();
}
}
和通过构造函数注入革离扮演者不同,在实例化MoAttack 剧本时,并未指定任何扮
演者,而是在实例化MoAttack 后,在需要革离出场时,才调用其setGeli()方法注入扮演者。
按照类似的方式,我们还可以分别为剧本中其他诸如梁王、巷淹中等角色提供注入的Setter
方法,这样,导演就可以根据所拍剧段的不同,注入相应的角色了。
3. 接口注入
将调用类所有依赖注入的方法抽取到一个接口中,调用类通过实现该接口提供相应的
注入方法。为了采取接口注入的方式,必须先声明一个ActorArrangable 接口:
public interface ActorArrangable {
void injectGeli(GeLi geli);
}
然后,MoAttack 实现ActorArrangable 接口提供具体的实现:
代码清单 3-7 MoAttack:通过接口方法注入革离扮演者
public class MoAttack implements ActorArrangable {
private GeLi geli;
//①实现接口方法
public void injectGeli (GeLi geli) {
this.geli = geli;
}
public void cityGateAsk() {
geli.responseAsk("墨者革离");
}
}
Director 通过ActorArrangable 的injectGeli()方法完成扮演者的注入工作。
代码清单 3-8 Director:通过接口方法注入革离扮演者
public class Director {
public void direct(){
GeLi geli = new LiuDeHua();
MoAttack moAttack = new MoAttack();
moAttack. injectGeli (geli);
moAttack.cityGateAsk();
}
}
由于通过接口注入需要额外声明一个接口,增加了类的数目,而且它的效果和属性注
入并无本质区别,因此我们不提倡采用这种方式。
分享到:
相关推荐
### Spring IOC控制反转详解 #### 一、Spring框架简介 Spring框架是一个开源的Java平台,提供了全面的基础架构支持,让开发者能够轻松地开发出松耦合的应用程序。它通过依赖注入(Dependency Injection, DI)和...
spring IOC控制反转 spring IOC控制反转 spring IOC控制反转
Spring框架的核心特性之一就是依赖注入(Dependency Injection,简称DI),它通过控制反转(Inversion of Control,简称IOC)实现。这个"helloIoc.zip"压缩包包含的是一组用于演示Spring IOC基本概念和使用的测试...
Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它改变了传统Java应用程序中对象的创建和管理方式。在传统的程序设计中,我们通常手动创建对象并管理它们之间的依赖关系,而在Spring中,这些...
**Spring IOC控制反转详解** 在Java开发中,Spring框架的核心特性之一就是IOC(Inversion of Control,控制反转),它改变了传统程序设计中的对象依赖管理方式,使得开发者可以更专注于业务逻辑,而不是对象的创建...
Spring Ioc(Inversion of Control,控制反转)是Spring框架的核心特性之一,它改变了传统应用程序中对象的创建和管理方式。在传统的软件设计中,对象的创建和依赖关系的维护通常由代码自身来完成,而在Spring Ioc中...
### Spring框架中的IoC控制反转详解 #### 一、IoC概述 控制反转(Inversion of Control,简称IoC)是一种设计思想,在Spring框架中,它主要用来解决对象依赖问题。传统的面向对象编程中,对象之间的依赖关系由对象...
【Spring框架IoC控制反转】 一、Spring框架是什么 Spring框架是Java开发中的一款轻量级框架,诞生于2003年,旨在简化企业级应用的开发复杂性。Spring的核心理念包括控制反转(IoC)和面向切面编程(AOP)。作为一...
**Spring技术--IOC控制反转** 在Java开发领域,Spring框架以其强大的功能和广泛的应用而闻名。其中,IOC(Inversion of Control,控制反转)是Spring的核心特性之一,它改变了传统对象创建和管理的方式,实现了依赖...
Spring IOC(Inversion of Control,控制反转)是一种软件设计模式,它将对象的创建和管理交给容器,实现了对象之间的解耦合。 SpringIOC是Spring Framework中的核心组件之一,负责管理应用程序中的对象、依赖关系和...
IoC 控制反转 IoC(Inversion of Control)是指在软件设计中,将对象实例的控制权从代码控制剥离到容器控制。这样做的目的是为了降低耦合度,提高系统的灵活性和可维护性。在 Spring 中,我们使用 XML 文件来配置...
Spring 框架是Java开发中的核心框架,它主要由两个关键部分组成:IOC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)。这两个概念是Spring框架的核心特性,极大地简化了企业...
基于annotation注解方式理解SpringIOC控制反转
Spring IOC,全称Inversion of Control,即“控制反转”,是Spring框架的核心特性之一。在传统的Java应用程序中,对象的创建和管理通常由开发者自己控制。而在Spring IOC中,这种控制权被反转,对象的创建、初始化、...
Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性之一,它允许开发者将对象的创建和管理交给Spring容器来处理,从而使代码更加松耦合,更易于测试和维护。下面将详细介绍Spring IOC的基本概念、...
Spring IOC,即Spring控制反转,是Spring框架的核心特性之一。控制反转(Inversion of Control,简称IoC)是一种设计原则,用于减少代码间的耦合,提高系统模块化和代码的重用性。在Spring框架中,IOC具体体现在对...
**Spring框架中的IoC(控制反转)概念** 在软件开发中,IoC(Inversion of Control,控制反转)是一种设计模式,它将对象的创建和管理责任从代码中剥离出来,交由一个容器来处理。Spring框架是Java平台上的一个核心...
### IoC Spring 控制反转详解 #### 一、IoC概念与重要性 在深入了解Spring框架之前,我们首先需要理解“控制反转”(Inversion of Control,简称IoC)的概念。IoC是一种设计原则,旨在减少组件之间的耦合度,提高...
Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它极大地简化了Java应用的开发,通过将对象的创建和管理交由Spring容器来处理,开发者可以更专注于业务逻辑。下面,我们将深入探讨Spring IOC...
Java中的控制反转(IOC,Inversion of Control)和Spring框架是现代企业级应用开发的核心概念。IOC使得应用程序的组件之间解耦,提高了代码的可测试性和可维护性。本篇文章将详细探讨如何通过反射机制来实现一个简单...