Spring IOC源码初探(一)

Spring提供了两个基本功能:IOC和AOP,基于此形成了Spring的生态环境,其中IOC又是整个Spring生态的基础,也就是IOC是Spring最核心的功能。

Spring IOC即反向控制,也可以叫依赖注入,把bean(组件)的初始化工作交给IOC容器,而不是在程序中完成,这就将组件的初始化和组件真正的核心功能相隔离,做到了解耦;另外,Spring IOC提倡面向接口编程,同样是为了解耦。Spring帮助我们使软件的结构符合,开闭原则(对修改封闭,对扩展开发:不需要修改代码来增加新的功能),是解耦组件依赖关系的利器。

下面我们通过对Spring IOC机制源码的学习,更好的理解Spring的IOC功能。

将从组成和行为两个角度来粗略分析Spring IOC容器,本文注意基于Spring IOC容器的组成来分析。

Spring容器主要指BeanFactory或者ApplicationContext,而我们常用的是后者。

Spring IOC源码初探(一)_第1张图片
Spring的容器的继承关系图

由此图,我们可以看到Spring容器继承关系的一个结构图。核心接口就是BeanFactory,它提供了容器的基本方法getBean以获得容器内的组件,HierarchicalBeanFactory,ListableBeanFactory,AutowireCapableBeanFactory三个接口分别继承自BeanFactory,并对BeanFactory的功能做了扩展。HierarchicalBeanFactory提供了父子容器的功能,ListableBeanFactory提供了容器内Bean的列表操作功能,AutowireCapableBeanFactory则提供了Bean的自动装配功能;ConfigurableBeanFactory则提供了BeanFactory的一些配置功能;这就是BeanFactory接口层次关系图,XmlBeanFactory是一个常见的BeanFactory实现它就实现了上述接口以提供完整的容器功能,同样依照此接口层次实现也可以达到解耦、职责清晰的目的。

ApplicationContext同样拥有BeanFactory的上述能力,所以它继承了BeanFactory体系的大部分接口,上图中有一点是不准确的,ApplicationContext并未继承AutowireCapableBeanFactory,它的实现类是通过持有BeanFactory实例来拥有自动装配的功能(它不对外暴露自动装配功能),特别地,ApplicationContext实现了MessageSource、ResourceLoader、ApplicationEventPublisher三个接口,以拥有对国际化、加载资源、事件机制的支持。

常见的BeanFactory实现有XmlBeanFactory,DefaultListableBeanFactory,前者继承自后者,而后者也是Spring中BeanFactory默认的全功能实现,ApplicationContext也是通过持有它而实现。
DefaultListableBeanFactory的使用需要我们去加载特定的配置资源,并配置解析器去解析,XmlBeanFactory只要求我们去加载需要的Xml配置资源。

我们在项目中更推荐使用ApplicationContext,它的实现类常见的有WebApplicationContext等,它除了帮助我们实现了资源加载功能外,还提供了上述的高级功能。

你可能感兴趣的:(Spring IOC源码初探(一))