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、后记

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

相关推荐
我家领养了个白胖胖2 分钟前
SSE在Spring ai alibaba中同时使用Qwen和DeepSeek模型
java·后端·ai编程
AI科技摆渡15 分钟前
GPT-5.2介绍+ 三步对接教程
android·java·gpt
Java编程爱好者16 分钟前
做了个Java打包工具,可以双击启动了!
后端
猿与禅22 分钟前
Spring Boot 4.0 完整核心特性及实践指南
java·spring boot·后端·spring·重大升级·springboot4.0
平凡运维之路32 分钟前
端口转发
后端
运维@小兵36 分钟前
Spring-AI系列——Tool Calling获取当前时间
java·后端·spring
认真敲代码的小火龙38 分钟前
【JAVA项目】基于JAVA的养老院管理系统
java·开发语言·课程设计
he___H39 分钟前
滑动窗口一题
java·数据结构·算法·滑动窗口
扶苏-su41 分钟前
Java---事件处理机制
java·开发语言
雨中飘荡的记忆41 分钟前
Hutool工具库实战
java