将大概的流程具体还是看源码

之前看源码的时候呢没有文字整理,想来还是写一个大概的流程吧,具体是无法用文字描述

spring源码真的yyds,数据结构 反射 父子类 接口…玩得溜到飞起  博大精深呐 后期不断喜欢ing!

springApplication.run方法

  • 获取了一个ConfigurableApplicationContent
  • spi加载了initializers  listener 

ps:通过这个context.getBeanFactory => defaultLIstableBeanFactory 父类       

     defaultSingletonBeanRegistry 里面有singletonObjects一级缓存all单例

     这个beanFactory没做什么事,后处理器processor扩展读取configuration/annotation

prepareRefresh准备工作:校验环境变量/初始化广播器等

obtainFreshBeanFactory获取configurableListableBeanFactory注册beanDefinitions信息

prepareBeanFactory

  • 初始化spring组件:类加载器/aware处理器/属性编辑器/表达式解析器
  • beanFactory其他属性
  • LWT系统信息等

postProcessBeanFactory子类定制,这就到了bean生命周期

  • bean推断构造函数 实例化bean 构造bean对象 有的createBean() 到@i
  •     前有postProcessBeforeInstantiation 后有postProcessAfterInstantiation
  • instantiationAwareBeanPostProcessor可自定义实例化对象过程,postProcessProperties设置属性,@resource这个属性便是利用了这点 操作injectionMetadata反射注入bean
  •      mergedBeanDefinitionPostProcess操作beanDefiniton 可以做数据准备,比如事件event通过接口applicationLIstenerDetector实现mergedBeanDefinitionPostProcess在registerBeanPostProcessors把detector放到beanPostProcessor,就是aop后放入方便获取代理对象 ,这就很妙
  • bean属性注入
  • 各种aware
  •     beanNameAware
  •     beanFactoryAware这个地方咱们@EnableAsync在import了selector中利用AsyncAnnotationBeanPostProcessor实现了,setBeanFactory 创建AsyncAnnotationAdvisor加载了拦截器interceptor invoke dosumbit 利用taskExecutor线程池创建callback执行
  •      applicationContentAware
  • beanPostProcess/postProcessorBeforeInitialization 实例化完成
  • afterPropertiesSet
  • init方法
  • beanPostProcess/postProcessorAfterInitialization 初始化后,咱们事件借助此addApplicationListener到容器
  • aop
  • smartInitializingSingleton咱们事件的注解在afterSingletonInstantiated 容器获取beanName/type  processBean 执行methodIntrosepector 获取@eventListener的信息 借助map 注册到容器
  • 使用bean

invokeBeanFactoryPostProcessor(beanFactory) 

registerBeanPostProcessor(beanFactory) 据priorityOrder ordered non 调postProcessorBeanFactory,beanPostProcessor加入到ioc的beanPostProcessor 封装处理

   这也提供了可扩展的空间

initmessagesource国际化

initApplicationEventMulticaster事件广播

onfresh 子类去实现

registerListener广播器注册监听器

finishBeanFactoryInitialization 注册单例 bean对象 ,preInstantiateSingletetons 加载单例

  • getBean构造bean对象 父类获取bean对象 校验beanDefinition 构造对象 校验类型 三级缓存加入战场了就

finishRefresh清理工作

再上一次图:

Spr​​​​​​dering之ApplicationListener实现监听原理_实现了applicationlistener-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/679351.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STC8增强型单片机开发——GPIO

一、理解电灯案例的代码 #include "STC8H.H"int main() {P5M0 0x00;P5M1 0x00;P53 1;while(1) {} } #include "STC8H.H" 引入头文件P5M0 0x00;P5M1 0x00;配置引脚模式P531;配置IO引脚的电平 二、头文件STC8H.H 针对 STC8H 系列芯片的头文件&#xff…

VALSE 2024 Workshop报告分享┆ 大规模自动驾驶仿真系统研究

视觉与学习青年学者研讨会(VALSE)旨在为从事计算机视觉、图像处理、模式识别与机器学习研究的中国青年学者提供一个广泛而深入的学术交流平台。该平台旨在促进国内青年学者的思想交流和学术合作,以期在相关领域做出显著的学术贡献&#xff0c…

【汇总】虚拟机网络不通(Xshell无法连接虚拟机)排查方法

搜索关键字关键字关键字:虚拟机虚拟机虚拟机连接失败、虚拟机无法连接、Xshell连接失败、ping baidu.com失败、静态IP设置 Kali、CentOS、远程连接 描述:物理机无法连接虚拟机;虚拟机无法访问百度,虚拟机无法访问baidu.com 虚拟机…

OpenCV|简单绘制一个矩形

OpenCV中的rectangle() 为绘制矩形命令,形式如下: # (img: cv2.typing.MatLike, pt1: cv2.typing.Point, pt2: cv2.typing.Point, color: cv2.typing.Scalar, thickness: int ..., lineType: int ..., shift: int ...)cv2.rectangle(img, pt1, pt2, …

Android getevent命令详细分析

在调试Android 的输入事件时,经常使用 “getevent -lrt” 命令,来确认驱动上报数据是否正常。从源码的角度来详细的分析一下getevent 这个程序。 首先用ls命令来看一下getevent lrwxr-xr-x 1 root shell 7 2023-11-20 10:08 system/bin/getevent -> …

基于Springboot的校园健康驿站管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的校园健康驿站管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系…

【数据可视化-01】Matplotlib图形实战宝典

在数据分析领域,图形化展示数据是非常重要的环节。Python中的matplotlib库是绘制各类图形的强大工具。本文将介绍如何使用matplotlib绘制折线图、直方图、饼图、散点图和柱状图等数据分析中常见的图形,并附上相应的代码示例,可以当初matplotl…

力扣41. 缺失的第一个正数

Problem: 41. 缺失的第一个正数 文章目录 题目描述思路复杂度Code 题目描述 思路 1.将nums看作为一个哈希表,每次我们将数字n移动到nums[n - 1]的位置(例如数字1应该存在nums[0]处…),则在实际的代码操作中应该判断nums[i]与nums[nums[i] - 1]是否相等,若…

ssm+vue的私人健身和教练预约管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频: ssmvue的私人健身和教练预约管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通…

解放双手,利用自动点赞软件提高曝光度

在数字时代,社交媒体如同一片繁茂的森林,每一条动态、每一张照片都是树上挂着的果实,而点赞则仿佛是那些吸引眼球的色彩。在这个以流量为王的网络世界里,点赞数往往与内容的可见度直接相关,它不仅能够增加帖子的权重&a…

Coze扣子开发指南:怎样建立一个工作流?

Coze扣子的工作流支持通过可视化的方式,对插件、大语言模型、代码块等功能进行组合,从而实现复杂、稳定的业务流程编排。​ 简单的说,目前阶段,单独靠大语言模型能完成的任务还是有限的,那怎么办呢?解决方案…

如何vscode中刷力扣

推荐你阅读 互联网大厂万字专题总结 Redis总结 JUC总结 操作系统总结 JVM总结 Mysql总结 微服务总结 互联网大厂常考知识点 什么是系统调用 CPU底层锁指令有哪些 AQS与ReentrantLock原理 旁路策略缓存一致性 Java通配符看这一篇就够 Java自限定泛型 技术分享 如何vscode中刷力扣…