Spring学习手册(2)—— IOC容器
Spring学习手册(1)--HelloSpring使得我们使用简单的配置完成了第一个基于Spring框架的应用程序,该篇文章主要对Spring IOC容器进行介绍。
一、IOC概念介绍
控制反转(Inversion of Control :IOC)通常也被称为依赖注入(dependency injection :DI)。控制反转(IOC)或依赖注入(DI)简单介绍如下:
- 一个类定义它所依赖的类实例,并且这些依赖实例只能通过构造函数、工厂方法参数、属性set方法进行设置;
- 当该类通过构造方法或工厂方法实例化完成后,IOC容器会将该类所依赖的实例注入到该类实例。
如上所述,该类实例构造过程不同于传统的类自身通过代码控制依赖类的实例化,而是由IOC容器控制依赖关系并将依赖实例注入,因此被称作控制反转(Inversion of Control )。
二、Spring IOC介绍
org.springframework.beans
和org.springframework.context
包内实现了Spring的基本IOC容器,BeanFactory
接口定义了基本的IOC容方法,并且org.springframework.beans
包内的实现类DefaultListableBeanFactory
实现了基本的IOC容器功能。ApplicationContext
接口间接继承BeanFactory
,内部使用DefaultListableBeanFactory
类,并使IOC容器增加消息资源处理、事件发布等特性。在org.springframework.context
包中,ClassPathXmlApplicationContext
和FileSystemXmlApplicationContext
为ApplicationContext
的具体实现。因ApplicationContextz
提供了更多的企业级应用功能,所以一般情况下应用开发中多实用ApplicationContext
类进行构建应用系统。
三、Spring Bean
基于Spring框架的应用程序中,IOC容器会根据开发者定义的配置元数据(configuration metadata)创建bean。例如,在使用XML为配置元数据对象时,使用<bean/>
定义可以由IOC容器控制的bean对象。在接下来的文章中,我们会以XML配置方式向西讲解IOC容器中bean定义、初始化、装配等信息。
四、IOC容器如何工作
- 创建POJO(Plain Old Java Object)业务类;
- 创建配置元数据文件,常见的方式XML配置模式、注解方式、基于java配置;
- IOC容器启动根据配置元数据文件将POJO创建为bean。
XML方式定义配置元数据:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<!-- more bean definitions go here -->
</beans>
五、使用IOC容器
// 使用XML文件初始化IOC容器
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
// 根据定义的bean名字从IOC容器中获取实例
MessagePrinter printer = context.getBean("messagePrinter", MessagePrinter.class);
printer.printMessage();
以上代码展示了使用ClassPathXmlApplicationContext
类实例化ApplicationContext
IOC容器,构造函数直接使用String
字符串传入配置文件,可使用逗号隔开同时传入多个配置文件名。直接使用getBean
方法根据配置的id/name获取相应实例。
六、总结
本文首先对IOC概念进行了简单介绍,在此基础上对Spring的IOC接口定义、类实现进行介绍;除对IOC容器介绍外,还介绍了IOC管理的bean的概念以及IOC容器如何工作:通过解析配置元数据文件,将开发者定义的POJO创建为bean,并根据配置元数据文件的定义绛POJO对象的依赖对象注入到该bean中。
接下来会主要以XML配置方式对配置元数据文件进行介绍。