首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Spring的底层源码分析

Spring的底层源码分析

作者头像
时间静止不是简史
发布2020-07-24 17:05:19
发布2020-07-24 17:05:19
8970
举报
文章被收录于专栏:Java探索之路Java探索之路

Spring的底层源码分析

  • 一 . Spring运行原理
    • 流程介绍
    • 流程图
  • 二、源码分析
    • Spring 中IOC 容器分类
    • 1. ApplicationContext
    • 2. ClassPathXmlApplicationContext
    • 3. 实例化Bean工厂
      • DefaultListableBeanFactory
    • 4 .解析配置文件
      • XmlBeanDefinitionReader
      • 将BeanDefiniton 注册到容器中
      • Bean 对象的实例化
      • GetBean

主要分析的是Spring 启动的过程以及如何获取Bean对象

一 . Spring运行原理

流程介绍

Spring 启动时读取应用程序提供的Bean 配置信息,并在Spring 容器中生成一份相应的Bean 配置注册表,然后根据这张注册表实例化Bean,装配好Bean 之间的依赖关系,为上层应用提供准备就绪的运行环境。

流程图

二、源码分析

Spring 中IOC 容器分类

IoC 容器:最主要是完成了完成对象的创建和依赖的管理注入等等。

Spring 中有两个主要的容器系列

1)实现BeanFactory 接口的简单容器;

2)实现ApplicationContext 接口的高级容器。

点击查看这两个IOC容器的区别

1. ApplicationContext

ApplicationContext 容器介绍

ApplicationContext 内部封装了一个BeanFactory 对象,来实现对容器的操作,BeanFactory封装了bean 的信息,而ApplicationContext 通过访问BeanFactory 对象获取bean 的对象信息ApplicationContext 也实现了一系列的BeanFactory 接口( 可以说ApplicationContext 对BeanFactory 对象实现一种代理)。 ApplicationContext 在应用这个DefaultListableBeanFactory 对象的基础上,不仅实现了 BeanFactory 接口提供的功能方法,并且黏合了一些面向应用的功能,如资源/国际化支持/ 框架事件支持等

其中BeanFactory作为最顶层的一个接口类,它定义了IOC容器的基本功能规范,BeanFactory 有三个子类:ListableBeanFactory、HierarchicalBeanFactory 和AutowireCapableBeanFactory。但是从上图中我们可以发现最终的默认实现类是 DefaultListableBeanFactory,他实现了所有的接口。

那为何要定义这么多层次的接口呢?查阅这些接口的源码和说明发现,每个接口都有他使用的场合,它主要是为了区分在 Spring 内部在操作过程中对象的传递和转化过程中,对对象的数据访问所做的限制。例如 ListableBeanFactory 接口表示这些 Bean 是可列表的,而 HierarchicalBeanFactory 表示的是这些 Bean 是有继承关系的,也就是每个Bean 有可能有父 Bean。AutowireCapableBeanFactory 接口定义 Bean 的自动装配规则。这四个接口共同定义了 Bean 的集合、Bean 之间的关系、以及 Bean 行为.

ApplicationContext 创建时 ,继承的所有父类

代码语言:javascript
复制
public interface ApplicationContext extends EnvironmentCapable,
ListableBeanFactory, //继承于BeanFactory
HierarchicalBeanFactory,//继承于BeanFactory
MessageSource, //
ApplicationEventPublisher,//
ResourcePatternResolver //继承ResourceLoader,
用于获取resource 对象

2. ClassPathXmlApplicationContext

refresh()方法

代码语言:javascript
复制
public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent)
			throws BeansException {

		super(parent);
		setConfigLocations(configLocations);
		if (refresh) {
			refresh();
		}
	}

3. 实例化Bean工厂

DefaultListableBeanFactory

在BeanFactory 子类中有一个DefaultListableBeanFactory 类,它包含了基本Spirng IoC容器所具有的重要功能,开发时不论是使用BeanFactory 系列还是ApplicationContext 系列来创建容器基本都会使用到DefaultListableBeanFactory 类,可以这么说,在spring 中实际上把它当成默认的IoC 容器来使用

4 .解析配置文件

XmlBeanDefinitionReader

将BeanDefiniton 注册到容器中

Bean 对象的实例化

GetBean

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Spring的底层源码分析
  • 一 . Spring运行原理
    • 流程介绍
    • 流程图
  • 二、源码分析
    • Spring 中IOC 容器分类
    • 1. ApplicationContext
    • 2. ClassPathXmlApplicationContext
    • 3. 实例化Bean工厂
      • DefaultListableBeanFactory
    • 4 .解析配置文件
      • XmlBeanDefinitionReader
      • 将BeanDefiniton 注册到容器中
      • Bean 对象的实例化
      • GetBean
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档