Spring的底层源码分析

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的底层源码分析_第1张图片

二、源码分析

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 接口提供的功能方法,并且黏合了一些面向应用的功能,如资源/国际化支持/
框架事件支持等

Spring的底层源码分析_第2张图片
其中BeanFactory作为最顶层的一个接口类,它定义了IOC容器的基本功能规范,BeanFactory 有三个子类:ListableBeanFactory、HierarchicalBeanFactory 和AutowireCapableBeanFactory。但是从上图中我们可以发现最终的默认实现类是 DefaultListableBeanFactory,他实现了所有的接口。
那为何要定义这么多层次的接口呢?查阅这些接口的源码和说明发现,每个接口都有他使用的场合,它主要是为了区分在 Spring 内部在操作过程中对象的传递和转化过程中,对对象的数据访问所做的限制。例如 ListableBeanFactory 接口表示这些 Bean 是可列表的,而 HierarchicalBeanFactory 表示的是这些 Bean 是有继承关系的,也就是每个Bean 有可能有父 Bean。AutowireCapableBeanFactory 接口定义 Bean 的自动装配规则。这四个接口共同定义了 Bean 的集合、Bean 之间的关系、以及 Bean 行为.

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

public interface ApplicationContext extends EnvironmentCapable,
ListableBeanFactory, //继承于BeanFactory
HierarchicalBeanFactory,//继承于BeanFactory
MessageSource, //
ApplicationEventPublisher,//
ResourcePatternResolver //继承ResourceLoader,
用于获取resource 对象

2. ClassPathXmlApplicationContext

Spring的底层源码分析_第3张图片

refresh()方法

public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent)
			throws BeansException {

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

Spring的底层源码分析_第4张图片

3. 实例化Bean工厂

DefaultListableBeanFactory

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

Spring的底层源码分析_第5张图片

4 .解析配置文件

XmlBeanDefinitionReader

Spring的底层源码分析_第6张图片

将BeanDefiniton 注册到容器中

Spring的底层源码分析_第7张图片

Bean 对象的实例化

Spring的底层源码分析_第8张图片

GetBean

Spring的底层源码分析_第9张图片

你可能感兴趣的:(Spring技术,源码初窥)