Spring是一个开源的JavaEE全栈框架,其中最为重要的核心模块是Spring IOC(Inversion of Control)容器。它负责对象的生命周期管理及依赖注入,为开发者提供了一种主动参与对象创建过程的方式。本文将从IOC容器的设计原理出发,详细讲解Spring IOC的体系结构设计。
一、IOC容器的功能规范和Bean的注册
1. IOC容器的功能规范
Spring IOC容器的主要功能是管理Bean对象的生命周期,并为其注入依赖关系。这里所说的依赖关系,包括Bean对象之间的依赖关系,以及Bean对象与配置文件或注解中的属性值之间的依赖关系。为了实现这样的依赖注入,Spring IOC容器采用了反转控制的方式,即通过容器来控制对象的创建和依赖注入过程,而不是由对象自己来创建或管理依赖关系。
2. Bean的注册
在IOC容器中,Bean的注册指的是将一个Java类定义为Bean对象,并将其保存到IOC容器中。Spring IOC容器会根据配置文件或注解信息来进行Bean的注册。例如,在XML配置文件中,可以使用如下方式将一个Java类定义为Bean对象:
<bean id="userService" class="com.example.UserService">
<property name="userDao" ref="userDao"/>
</bean>
上述配置文件将com.example.UserService类定义为一个Bean对象,并注入了名为userDao的依赖关系。在IOC容器启动时,Spring会通过反射机制创建UserService对象,并自动注入userDao属性。
3. BeanFactory定义了IOC容器基本功能规范
BeanFactory是IOC容器的核心接口,用于管理Bean对象的生命周期和依赖关系注入。BeanFactory定义了容器的基本功能规范,包括:
(1)获取Bean对象:BeanFactory提供了根据Bean的名称或类型获取Bean对象的方法,例如getBean()、getBeanDefinition()等。
(2)注册Bean对象:BeanFactory提供了注册Bean对象的方法,例如registerBeanDefinition()、removeBeanDefinition()等。
(3)销毁Bean对象:BeanFactory提供了销毁Bean对象的方法,例如destroyBean()、destroySingletons()等。
(4)设置Bean属性:BeanFactory提供了设置Bean属性的方法,例如setPropertyValues()、getPropertyValue()等。
4. BeanFactory为何要定义这么多层次的接口?定义了哪些接口?
BeanFactory定义了多个接口,包括:
(1)
AutowireCapableBeanFactory:继承了BeanFactory接口,增加了Bean的自动装配能力。
(2)ConfigurableBeanFactory:继承了
AutowireCapableBeanFactory接口,增加了Bean配置信息的管理能力。
(3)HierarchicalBeanFactory:继承了ConfigurableBeanFactory接口,增加了BeanFactory之间的层次结构管理能力。
(4)ListableBeanFactory:继承了HierarchicalBeanFactory接口,增加了Bean列表的管