Spring源码解析-总览

1、前言

复制代码
 Spring源码一直贯穿我们Java的开发中,只要你是一个Java开发人员就一定知道Spring全家桶。Spring全家桶为我们一共一站式服务,IOC、AOP更是Spring显著特性。但是Spring到底怎么为我们提供容器,管理资源的呢?

下来,我们将一步步探究Spring源码内幕。本章节主要讲述Spring源码的概述。

2、总览图

复制代码
总览图中,主要通过注解的方式探索整个源码的流程,这也是程序的入口。主要包括三个类:
  • FileSystemXmlApplicationContext

  • ClassPathXmlApplicationContext xml配置方式

  • AnnotationConfigApplicationContext 注解配置的方式

其中,AnnotationConfigApplicationContext 又分为三个大部分:

  • this() 构造函数, 构建注解需要的读取注解需要的xxxReaderxxxScanner

  • register() 注册注解需要的配置类

  • refresh() 核心流程,也是所有Spring的核心关键点

refresh 是整个Spring生产Bean对象的关键流程,管理这Bean的生命周期。

  • 加载配置文件

  • 解析文件内容

  • 装载生成Bean所需要的所有定义信息

  • 初始化Bean对象

  • 填充Bean对象的属性

  • Bean对象的后置处理

最终完成Bean对象的创建,其中使用三级缓存解决循环依赖的问题、扩展接口的加载与调用、aop的处理等一系列的操作。

3、整体流程示意图

整体的流程大致也是reflesh的流程。加载、解析、扩展、实例化、初始化的过程。这是Spring为我们管理Bean的生命周期,同时IOC依赖注入的整个过程。

4、关键类的认识

4.1 BeanFactory

BeanFactory 是Spring框架中一个核心接口,主要用来管理和提供程序应用的Bean,管理这Bean的整个生命周期。主要作用如下:

  • Bean创建和实例化

  • Bean依赖注入

  • Bean生命周期的管理

  • Bean的获取和查找

通过BeanFactory,我们也可以窥探一二。

4.2 FactoryBean

FactoryBean 同样也是用来创建Bean,但是FactoryBean 不必须严格遵守Bean的生命周期,用户可以快捷的创建Bean对象,从而被Spring管理。

  • 通过getObject()方法获取Bean对象

  • 还可以通过& + 名称 获取FactoryBean 本身。

  • actoryBean可以用于装饰和增强对象。通过在getObject()方法中对实际对象进行包装或增强,可以在对象创建过程中添加额外的逻辑或功能。

4.3 DefaultListableBeanFactory

BeanFactory 的默认实现类。不指定的情况下,我们所说的BeanFactory 就是 DefaultListableBeanFactory 本尊。

4.4 RootBeanDefinition

RootBeanDefinition 封装的Bean的所有定义信息,也是Bean对象创建的核心。也是Bean父子类定义信息的合并。

4.5 BeanFactoryPostProcessor

BeanFactoryPostProcessor Bean工厂的后置处理器,也是一个钩子方法。可以修改Bean工厂的Bean属性值。

BeanFactoryPostProcessor 是在加载Bean定义之后,实例化之前对Bean的定义进行修改。这些修改可以包括添加新的属性值、更改属性值或者删除属性值等。这个过程发生在Bean的实例化之前,因此对Bean的定义进行的任何修改都会影响到后续的Bean实例化过程。

4.6 BeanPostProcessor

BeanPostProcessor 是在Bean的实例化之后但在依赖注入之前对Bean进行定制化处理。这个过程发生在Bean的依赖注入之前,因此可以在这个阶段对Bean进行一些额外的处理,例如初始化、属性注入等。

5、后记

因为对框架的不断深入学习,后续还会不断完善各章节的内容。

相关推荐
我叫黑大帅7 分钟前
受保护的海报图片读取方案 - 在不公开静态资源目录下如何获取静态资源
后端·python·面试
爱学习的小囧8 分钟前
ESXi性能历史怎么监控?2种方法,图形化+命令行全覆盖
java·linux·运维·服务器·网络·esxi·esxi8.0
我母鸡啊10 分钟前
软考架构师故事系列-嵌入式技术
后端
smileNicky11 分钟前
Spring AI系列之集成 Milvus 构建 RAG 智能问答系统
人工智能·spring·milvus
逻辑驱动的ken18 分钟前
Java高频面试考点场景题11
java·深度学习·面试·职场和发展·高效学习
MXN_小南学前端25 分钟前
Vue3 + Spring Boot 工单系统实战:用户反馈和客服处理的完整闭环(提供gitHub仓库地址)
前端·javascript·spring boot·后端·开源·github
JavaGuide31 分钟前
太魔幻了!SpaceX官宣600 亿美元收购Agent编程的鼻祖Cursor
人工智能·后端
学习3人组32 分钟前
面向对象编程:反射(Reflection)原理与应用详解
java
斯维赤35 分钟前
每天学习一个小算法:快速排序
java·python·学习·算法·排序算法
LSL666_37 分钟前
快速Spring Cloud+ELK+AOP搭建一个简单的项目
spring·elk·spring cloud