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做准备
- Spring IoC源码解析(1):BeanFactory和ApplicationContext
- spring IOC BeanFactory和ApplicationContext
- 先码后看 spring IOC源码(beanfactory、applicationcontext、webapplicationcontext) 侵立删
- spring 核心与源码解析(1):IoC之BeanFactory
- Spring学习之IOC容器BeanFactory和ApplicationContext(三)
- Spring--BeanFactory和ApplicationContext
- Spring--BeanFactory和ApplicationContext
- 7.4.1:Spring容器ApplicationContext和BeanFactory
- spring的BeanFactory和ApplicationContext源码详解(一)
- spring的BeanFactory和ApplicationContext源码详解(二)
- spring的BeanFactory和ApplicationContext源码详解(一)
- spring的BeanFactory和ApplicationContext源码详解(二)
- spring的BeanFactory和ApplicationContext源码详解(一)
- spring的BeanFactory和ApplicationContext源码详解(二)
- Spring源码分析——BeanFactory和ApplicationContext
- ApplicationContext和BeanFactory的区别-----spring源码心得
- Spring BeanFactory、ApplicationContext层次结构和BeanDefinition解析过程
- spring中BeanFactory和ApplicationContext
- BZOJ 1615: [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机
- 不合格高校教师的自我总结(学生评价)
- 搭建vpn server
- 2018年搜狐8月28日技术类笔试题目代码分享
- BuildBot
- Spring IoC源码解析(1):BeanFactory和ApplicationContext
- github branch 常见用法
- MyBatis解决字段名和实体类属性名不相同冲突问题时返回查询结果为空
- 解决eclipse中启动Tomcat成功但是访问不了Tomcat问题
- 时间序列数据库的秘密(2)——索引
- React-Native 指定模拟器RUN-IOS
- java基础
- Chisel的安装与使用
- win10系统下mysql-5.7.19-winx64.zip安装配置教程