Spring框架中IOC的实现
2018-02-28刘双
刘双
摘要
传统程序设计中,程序需要经过手动的方式来获取被依赖的对象,而spring采用控制反转模式,该模式使用容器来自动获取,完美地克服了传统模式的弊端。本文对Spring框架中10C模式的具体实现进行研究与分析。
【关键词】控制反转 IOC Spring
1 IoC模式类型
1.1 Method注入方式
当调用的方法需要依赖某些对象时,那么该方法的参数就是需要传递的对象。在这种方式中,被依赖的对象和调用者无法建立组合关系,调用者仅需要在注入被依赖对象的方法中,使用被依赖对象进行特定的操作即可。
1.2 接口注入方式
声明依赖的方式有很多,如常用的Serviceable,Configurable等接口。接口中往往是一些抽象方法,调用者类需要实现接口中的抽象方法,在抽象方法中编写被依赖对象被注入的方式。
1.3 设值注入方式
setter方法可以很轻易的对被依赖对象进行设置。在调用这类中,会有一个和被依赖对象有相同类型的成员变量,使用设值注入可以将被依赖的setter方法传递到IOC容器当中,同时将被依赖对象传给相应的成员变量。
1.4 构造注入方式
使用构造器来声明依赖。在调用者类中,会实现一个带有被依赖对象为形参的构造器,IoC容器在初始化该调用者对象前,首先初始化被依赖对象。初始完成后,将调用者对象相应的构造器注入被依赖对象,通过构造函数将被依赖对象赋值给指定的成员变量。
2 Spring基础知识
Spring容器可用于在spring中实现控制反转,也被称为依赖注入。在spring中所有java对象的创建和管理都是由spring对象实现,其中所有的Java对象都被叫做Bean。开发者需要使用配置文件或注解向Spring容器注册Bean。Spring容器有两种:BeanFactory和ApplicationContext。
其中,ApplicationContext接口是BeanFactory接口的子接口,ApplicationContext对BeanFactory的功能进行了扩展,其中包括:预先初始化单例类,增加了事件机制等。
3 Spring实现IoC
Spring支持设值注入和构造注入两种方式的IoC。在Spring中配置IoC有两种方式:
(1)使用配置文件方式,开发者需要在配置文件中配置相应的Bean,在这种情况下当Spring容器在加载时,便会读取配置文件并将配置文件中的Bean实例化为Java对象;
(2)使用@Autowired注解,该注解按照byType的方式进行匹配,依赖注入的方式与配置文件相似,本文不做详细介绍。
使用配置文件方式,需要在Spring的配置文件内配置Bean的信息,可将id来作为Bean唯一的标识,Bean的具体实现类可以使用class来指定,下文会有详细介绍。
4 Spring中IOC的具体实现
下面通过配置文件实现设值注入为例进行介绍。
4.1 创建模型
假设模型:系统类(system),以及系统要依赖的组件类(Component),如下:
public class System{//系统类
private String name;
private Component component;//依赖组件
//get/set方法略
}
public class Component{//组件类
private String name;
//get/set方法略
}
4.2 设值注入
Spring容器使用成员变量的setter方法来注入被依赖对象,即设值注入。在配置文件中需要为Bean元素配置property元素,每一个property驱动Spring容器执行Bean的setter方法一次。
property有如下属性:
name:对应类的某一个setter方法;
value:驱动程序将此属性等号右边的字面值传入setter方法中;
ref:驱动程序查找Spring容器中id与此属性等号右边字符串相同的Bean。
以下是配置文件的具体代码:
Spring容器在启动时,首先读取配置文件,检查是否有Bean定义。程序读取id为system的Bean后,对实现类System类进行检测,并且通过设值注入为该system Bean注入两个属性。
程序根据反射机制获得相应类的对象,调用类对象的newlnstanceo方法获取System类的对象。由property属性的name参数解析到,程序需要调用setName方法来为System对象注入windows值,同时为component参数注入此配置文件中的另一个Bean,之后实例化component Bean。实例化完成后,通过setcomponent()将component对象注入System对象,到此整个system Bean的实例化工作便完成了,系统以此Bean的配置id作为键,将其放入Spring容器中,等待程序的获取。
5 結论
综上,大致介绍了IoC模式的四种实现方式,以及Spring配置文件的配置信息,同时也了解了Spring中IoC的两种实现方式,并以setter(设值)注入为例,介绍了具体的实现过程,对于IOC的整体研究有一定的价值。
参考文献
[1]顾悦,王建军.Spring ActionScript中IoC容器注入机制研究[J].电脑知识与技术,2010,06(28):8033-8034.
[2]薄奇,许林英.Spring框架中IoC的实现[J].微处理机,2008,29(01):147-149.