Spring IoC源码解析(1):BeanFactory和ApplicationContext

来源:互联网 发布:2017程序员笔记本 编辑:程序博客网 时间:2024/06/05 08:27

该系列主要根据《SPRING技术内幕:深入解析SPRING架构与设计原理》一书整理。

Spring IOC容器的设计中,存在两个主要的容器系列,一个是实现BeanFactory接口的简单容器,这系列容器只实现了容器的最基本功能;另一个是ApplicationContext应用上下文,它作为容器的高级形态存在,在简单容器的基础上,增加了许多面向框架的特性,同时对应用环境做了许多适配。

1-1  Spring IOC容器概况


1-2  Spring IOC资源概况


所以Beanfactory接口是作为一个最基本的接口类出现在Spring IOC容器体系中的。在这些Spring提供的基本IOC容器的接口定义和实现的基础上,Spring通过定义BeanDefinition来管理基于spring的应用中的各种对象以及它们之间的相互依赖关系。BeanDefinition抽象定义了我们对Bean的定义,是让容器起作用的主要数据类型。

1-3  IOC容器的接口设计


下面对接口设计做简要分析:

1、BeanFactory→HierarchicalBeanFactory→ConfigurableBeanFactory是一条主要的BeanFactory设计路线。BeanFactory接口定义了基本的IOC容器规范。HierarchicalBeanFactory增加了getParentBeanFactory、containsLocalBean方法,具备了双亲IOC容器管理功能。ConfigurableBeanFactory主要定义了一些Bean的配置功能,比如addBeanPostProcessor()配置bean后置处理器,setParentBeanFactory()设置双亲IOC容器。

2、第二条接口设计的主线是以ApplicationContext为核心,从BeanFactory→ListableBeanFactory→ApplicationContext,再到WebApplicationContext或者ConfigurableWebApplicationContext。我们常用的上下文基本上就是WebApplicationContext或者ConfigurableWebApplicationContext,连接BeanFactory和ApplicationContext应用上下文的接口定义。在ListableBeanFactory,细化了许多BeanFactory接口的功能。对于ApplicationContext继承了 EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,MessageSource, ApplicationEventPublisher, ResourcePatternResolver。

3、这里涉及的主要是接口关系,具体的IoC容器都是在这些接口下实现的,比如DefaultListableBeanFactory

 

BeanFactory

BeanFactory容器的设计原理

DefaultListableBeanFactory作为一个默认的功能完整的IoC容器来用。

ApplicationContext

ApplicationContext实现的接口

因此ApplicationContext比BeanFactory多了许多附加的功能。

1、  支持不同的信息源

2、  访问资源

3、  支持应用实践

ApplicationContext容器设计原理

以常用的FileSystemXmlApplicationContext为例,ApplicationContext应用上下文的主要功能在基类AbstractXmlApplicationContext中实现了,它只要实现与自己设计相关的两个功能就行了。

1、  直接使用FileSystemXmlApplicationContext,实例化这个应用上下文,同时启动IoC容器的refresh()。

Refresh是IoC容器启动的一系列复杂的操作,对于不同的容器,都是相似的,在这里只是一个简单的调用,后面会专门分析。

2、  从文件系统中加载XML的bean定义资源

该过程为在文件系统中读取以XML形式存在的BeanDefinition做准备


阅读全文
0 0
原创粉丝点击