IOC容器基本原理
在没有使用IOC时,我们在程序内部new关键字创建对象(bean)并管理对象之间的关系。使用了IOC后,创建对象和管理对象之间关系的工作由IOC容器负责,控制权从程序内部转换到了IOC容器,所以称为控制反转。在Spring中,组成应用程序的主体及由Spring IOC容器管理的对象,被成为Bean。bean就是IOC容器初始化、装配及管理的对象。bean定义以及bean相互间的依赖关系将通过配置元数据来描述
配置元数据
IOC读取配置元数据,并通过它对应中各个对象进行实例化、配置以及组装。一般以xml文件配置元数据,定义bean。
<?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-3.0.xsd">
<bean id="..." class="...">
<!--该bean的协作者及其他配置-->
</bean>
</beans>
bean元素对应于在应用程序中创建bean对象。一般包括:Action表示层对象,Service对象,DAO对象等。
id属性给bean指定标识符,class属相是类的全限定类名。id具有唯一性,name可提供多个名称,用逗号分割。
实例化容器
添加jar包,编写xml文件,在工程的src目录下新建一个xml文档,就是上面的配置文件。然后实例化容器
IOC容器负责容纳此前描述的bean,一般不需要用显示的代码去实例化一个或多个IOC容器。BeanFactory的getBean()方法从容器中获取实例,和new关键字创建的实例没有区别。
使用 ApplicationContext
是BeanFactory的扩展,一般把ApplicationContext接口作为使用IOC容器类的首选。需添加jar包。
bean的实例化
xml配置文件中bean的定义描述了如何创建实例,容器会从bean定义列表中取得一个指定的bean定义,并根据bean定义的具体内容使用反射机制来创建或取得一个实际的对象。class属性指明了将被实例化的对象类型,一般容器直接通过反射调用指定类的构造器来创建bean实例。少数调用类的静态工厂方法来创建bean实例。