Spring源码解析-总览

spring源码解读 xml文件。声明式。@bean注解。声明式。@component注解。声明式。编程式//取出 User user = annotationConfigApplicationContext . getBean("user" , User . class);实现FactoryBean接口自定义工厂类//获取对象 public Object getObject() throws Exception {} //获取类型 public Class <?} }定义bean和取出bean。 阅读详情

1、前言

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

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

2、总览图

微信图片_20230831161810.png

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

  • ClassPathXmlApplicationContext xml配置方式

  • AnnotationConfigApplicationContext 注解配置的方式

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

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

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

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

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

  • 加载配置文件

  • 解析文件内容

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

  • 初始化Bean对象

  • 填充Bean对象的属性

  • Bean对象的后置处理

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

3、整体流程示意图

Spring的启动流程.png

整体的流程大致也是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、后记

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

源码解析:Spring源码解析笔记(五)接口设计总览 本文由colodoo(纸伞)整理 QQ 425343603 Java学习交流群(717726984) Spring解析笔记 启动过程部分已经完成,对启动过程源码有兴趣的朋友可以作为参考文章。 源码解析:Spring源码解析笔记(二)启动过程(上) 源码解析:Spring源码解析笔记(三)启动过程(中) 源码解析:Spring源码解析笔记(四)启动过程(下) 启动过程篇幅已经阅读结束,后续如果有遗漏的和错误的地方都会进行修正,接下来我们就要深入的学习一下Spring的设计。 我们先从启动过程章节中经常. 阅读详情

相关推荐

Spring 源码硬核解析系列专题(三十):Spring Cloud Data Flow 的数据流源码解析

http | log:HTTP 来源到日志接收器。将 DSL(如http | log)解析为应用列表。

资深架构师分享:深入剖析软件架构,探讨云计算、微服务、大数据等前沿技术。分享实践经验,促进技术交流,共同构建卓越系统。 1805

【Java】【系列篇】【Spring源码解析】【一】【总纲】【Spring结构与设计】

Spring源码系列总纲

时光与简的博客 537

Spring 源码硬核解析系列专题(十四):Spring AMQP 与 RabbitMQ 的源码解析

在前几期中,我们从 Spring 核心到 Spring Boot 的多个模块,再到 Spring Cache,逐步揭示了 Spring 生态的丰富功能。在分布式系统中,消息队列是解耦和异步处理的关键,而 Spring AMQP 提供了与 AMQP 协议(如 RabbitMQ)的集成支持。本篇将深入 Spring AMQP 的源码,剖析其核心机制与实现原理,并补充图示。

资深架构师分享:深入剖析软件架构,探讨云计算、微服务、大数据等前沿技术。分享实践经验,促进技术交流,共同构建卓越系统。 1142

Spring全家桶源码解析--2.7 Spring启动过程

了解Spirng 的启动过程,可以知晓Spring 中对于BeanDefinition 的生成和不同类型bean 的创建工作,了解bean 的前置后置处理器,可以在定义bean 的时候知晓其工作的原理。invokeBeanFactoryPostProcessors 扫描生成bean 定义:通过beanFactory 的后置处理器去扫描生成bean 定义// 调用 beanFactory 的后置处理器if (!

拽着尾巴的鱼儿的博客 376

Spring 源码硬核解析系列专题(八):Spring Security 的认证与授权源码解析

在前几期中,我们从 Spring 核心到 Spring Boot,再到 Spring Cloud,逐步探索了 Spring 生态的底层原理。作为企业级应用的关键组件,Spring Security 提供了全面的安全解决方案,包括认证(Authentication)和授权(Authorization)。本篇将深入 Spring Security 的源码,剖析其核心机制与实现细节。

资深架构师分享:深入剖析软件架构,探讨云计算、微服务、大数据等前沿技术。分享实践经验,促进技术交流,共同构建卓越系统。 1418

4. PCIe 接口时序

在上一篇中,大致介绍IPcore接口。总的来说接口如下图数据的接收和发送通过transmitTLPinterface和ReceiveTLPinterface。收发数据的时序也只是描述这几个接口的关系。从手册上截取PCIex1的接口时序。

jjinl的专栏 6123

Spring源码学习---------(最简单易懂的源码学习笔记)

前沿 工作一段时间了,之前一直想学习一下spring的源码,最近有时间学习了一下。现在把最近学习的成果整理一下,也向大家分享一下。 下面是spring源码的学习笔记,仅供参考。本人能力有限,难免会出现问题,欢迎各位大佬指出。 读源码的方法: 之前只是看过JDK的一些源码,像是spring和springboot等源码只是简略的看过,并没有系统的学习过,同时,这么优秀的作品很是值得我们学习的。抱着好奇心开始了读spring源码的道路,废话不多说,这里把我的学习笔记分享给大家。 读源码首先找...

奇点 2万+

ODS 与模态分析

模态分析不是通过现有的 FRF 来“推测”或“估计”其他模态参数,而是通过测量和分析 FRF 来。

轩辕霸天L 1261

Spring源码分析

通俗来讲就是一个开源java开发框架字面翻译:春天,寓意经历了寒冬,迎来了春天,给java生态注入了生机。

Jelly 454

从零构建:Simulink与PX4的快速原型开发实战

本文详细介绍了如何利用Simulink与PX4进行四旋翼无人机的快速原型开发,涵盖环境搭建、动力学建模、控制器设计、仿真验证及自动代码生成全流程。通过实战案例展示姿态控制器的实现与调试,帮助开发者高效完成从算法设计到硬件部署,显著提升开发效率并降低试错成本。

plant的博客 323

基于ResNet-50的猫狗分类训练

基于ResNet-50的猫狗分类python训练

weixin_46352497的博客 1004

Spring cloud gatway 源码解析之总览 01

Gateway概念介绍 网关的主要功能职责主要有 请求集中接入,多业务聚合,中介策略。gateway的中文翻译是 出入口的意思,其实该模块的职责其实超出了名字的含义,因为也包含了采用各种策略保户 后端资源的可用性,所以我更想叫它 survival gateway。网关分类如下: Spring Cloud Gateway架构梳理 思考 1:gateway是如何被初始化的? 2:gateway如何嵌入请求链路中的? 3:gatway 如何设计各个组件的关系的,然后变得更加容易扩...

louie_zhao的博客 374

卡尔曼滤波算法-Kalman Filter Algorithm

Kalman滤波是一种递归过程,主要有两个更新过程:时间更新和观测更新,其中时间更新主要包括状态预测和协方差预测,主要是对系统的预测,而观测更新主要包括计算卡尔曼增益、状态更新和协方差更新,因此整个递归过程主要包括五个方面的计算:1)状态预测;2)协方差预测;3)卡尔曼增益;4)状态更新;5)协方差更新; 用数学公式表示,如下: 状态预测:(1) 其中,X(k|k)是k时...

sunlin972913894的博客 2万+

spring源码解析之如何从spring中获取一个bean(总览)

前言:疫情期间,在家办公,虽说有种种不便,与此同时,也有了充足的时间,学习了一些想学习的知识,如有错误,敬请指出。 1:解读 spring的主要功能是IOC与AOP,此章节暂时不讲述AOP,但针对IOC来讲,getBean()方法是重中之重,例如下面这个例子,我们这样做就可以从容器中取出一个bean的实例 AnnotationConfigApplicationContext configApplicationContext=new AnnotationConfigApplicationContext

董先生的远方 771

携程滑块、点选验证码登录识别逆向

本文分析了携程登录系统的风控机制,主要包含三种验证场景:无验证码、滑块验证码和二次图标点选验证码。通过跟踪risk_inspect风控接口,发现验证流程采用标准AES加密,需提交设备指纹等加密信息。当触发验证码时,需额外提交包含轨迹坐标的verify_msg参数及token/rid参数。最终通过风控检测后,需使用一致的指纹参数和验证token完成加密登录。文章强调所有分析仅用于学习,代码实现需确保符合法律规范。

码王吴彦祖的博客 1104

2022年8月27日全国青少年信息素养大赛Python编程小学组决赛真题+答案解析

2022年8月27日全国青少年信息素养大赛Python编程小学组决赛真题+答案解析

伶俐角少儿编程 455

spring5.0 源码解析 finishBeanFactoryInitialization 总览(08)

spring5.0 源码解析 finishBeanFactoryInitialization 总览

1999的博客 454

【AI Agent系列】【阿里AgentScope框架】深入源码:Msg是如何转变成模型需要的Prompt形式的?多模态Prompt如何构建?

前面咱们学习AgentScope,在使用Agent来对话时,输入为一个 Msg 对象,不能是字符串,然后在Agent内部,会将Msg对象转换为模型接受的Prompt。那 AgentScope 如何根据 Msg 形成相应模型接收的Prompt结构的?如何使用 Msg 带入更多的参数,传递给大模型呢?

同学小张的博客 1535

《Spring源码深度解析》

Spring整体架构和环境搭建 Spring整体架构 Spring Core:框架的最基础部分,提供 IoC 容器,对 bean 进行管理。 Spring Context:继承BeanFactory,提供上下文信息,扩展出JNDI、EJB、电子邮件、国际化等功能。 Spring DAO:提供了JDBC的抽象层,还提供了声明性事务管理方法。 Spring ORM:提供了JPA、JDO、Hibernate、MyBatis 等ORM映射层. Spring AOP:集成了所有AOP功能 Spring Web:提供

ByteX的博客 4万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Spring源码解析(十):spring整合mybatis源码

通过sqlSession获取对应的代理对象代理对象执行sql完成数据库操作// 1.解析XML配置// 2.基于解析好的XML配置创建一个SqlSessionFactory// 3.通过SqlSessionFactory,创建一个SqlSession// 4.获取一个代理对象// 5.调用代理对象的方法System.out.println("代理对象查询结果:" + mapper.selectOne(1));根据@MapperScan注解扫描指定路径下接口。

从基础到源码解析的学习记录 1277

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring源码之IOC源码解析

文章目录前言类的体系结构源码解析ClassPathScanningCandidateComponentProviderClassPathBeanDefinitionScannerAnnotatedBeanDefinitionReaderAnnotationConfigUtilsBeanDefinitionReaderUtilsAbstractApplicationContextPostProces...

从入门到脱发 4702

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Spring源码深度解析

自定义标签使用自定义标签解析本笔记完全从开发者的角度去剖析源码,每一章都会提供具有代表性的实例,并以此为基础进行功能实现的分析,而不是采取开篇就讲解什么容器怎么实现、AOP怎么实现之类的写法。在描述的过程中,本书尽可能地把问题分解,使用剥洋葱的方式一层一层地将逻辑描述清楚,帮助读者由浅入深地进行学习,并把这些难点和问题各个击破,而不是企图一下让读者理解一个复杂的逻辑。在阅读源码的过程中,我们难免会遇到各种各样的生僻功能。

资料免费分享,点击名片 1063

Spring6的源码解析

Spring6的源码解析、jdk17、SpringBoot3

蓝影铁哥的博客 2556

spring源码深度解析_Spring的底层源码解析

Spring 运行原理 : Spring 启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成一份相应的 Bean 配置注册表,然后根据这张注册表实例化 Bean,装配好 Bean 之间的依赖关系,为上 层应用提供准备就绪的运行环境。 然后spring容器会定义一个Bean注册表,之后会根据注册表的信息,去加载到Bean实现类,实例化bean的实现类,在实例化的过程当中,完成一个...

weixin_39609483的博客 4333

Spring AOP源码详细解析

一 . 以下是bean的初始化过程: 注意: 先明白beanPostProcessor的作用,才能够明白aop的加载时机 在bean实例化完成之前和完成之后分别会自动BeanPostProcessor接口的postProcessBeforeInitialization和postProcessAfterInitialization方法。 二: 介绍一些Spring Aop中一些核心类,大致分为三类: advisorCreator,继承 spring ioc的扩展接口 beanPos...

pengjianglilive的专栏 3678

老实人spring源码解析目录

本篇介绍一下通过本专题将学习哪些内容以及一些前期的准备工作。 #前言 1.本专题主要以XmlBeanFactory展开源码阅读,主要介绍spring IoC容器的启动(Bean的解析)及Bean实例化两大阶段。 可能现在基本上不会有人再开发中再使用XmlBeanFactory,但是XmlBeanFactory较为简单,可以刨去一些增强功能,有助于抓住spring主线的理解。 2.在阅读源码前,有...

bugpool的博客 3287
上一篇: 设计模式之责任链模式
下一篇: Spring源码解析-构造函数
智_永无止境
博客等级 码龄10年 803粉丝 406原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智_永无止境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值