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

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

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.mzph.cn/pingmian/8435.shtml

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

相关文章

无刷电机和有刷电机的区别

无刷电机和有刷电机的区别 无刷电机的定子上绕着线圈,线圈通常是成对出现的,通过控制电路为每一对线圈按照一定顺序输入电流,就可以产生旋转的磁场 它还有一个永磁体转子,现在多采用高磁能级的稀土铷铁硼材料,体积更小…

DBdoctor产品介绍

基本信息 DBdoctor是聚好看科技股份有限公司自主研发的一款数据库内核级性能诊断工具,首次将eBPF技术聚焦在了数据库领域,一分钟内定位数据库性能问题并给出优化建议,实现数据库性能诊断百倍提效。 免费下载 请在PC端打开以下链接&#x…

ps5电玩计时收费系统软件教程,电玩店适合的计时器,电脑定时语音提醒

ps5电玩计时收费系统软件教程,电玩店适合的计时器,电脑定时语音提醒 一、前言 以下软件操作教程以,佳易王电玩计时计费管理软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、计时计费功能:只…

【日志革新】在ThinkPHP5中实现高效TraceId集成,打造可靠的日志追踪系统

问题背景 最近接手了一个骨灰级的项目,然而在项目中遇到了一个普遍的挑战:由于公司采用 ELK(Elasticsearch、Logstash、Kibana)作为日志收集和分析工具,追踪生产问题成为了一大难题。尽管 ELK 提供了强大的日志分析功…

Spring:OAuth2.0

文章目录 一、认证与授权二、OAuth2.0介绍 一、认证与授权 认证(Authentication)与授权(Authorization)在网络安全和系统管理中是两个重要的概念,它们各自有不同的作用和目标。 认证是验证确认身份以授予对系统的访问…

RAG解决方案:解决LLM大模型私域数据缺失问题

目前LLM大模型是一种预训练模型(训练完成后 信息就会截止),那么在获取最新数据和私域数据时候,LLM会有无法给出相关回答的问题。 那么RAG方案可以一定程度上解决这个问题。 用户搜索后,会先在检索系统中检索,然后再把问题和私域数…

夏天一到,手机越用越烫?怎样降低持久使用手机时的温度?

夏季来临,手机的温度也随着使用环境的温度升高变得更容易发热。 虽说属于正常的物理现象,但手机过热用起来还是不太舒服,还容易出现过热提醒,导致除“拨号”和“联系人”外,无法使用其它应用。 分享几个减少功耗的小技…

JAVA版本的ATM编程问题记录

前段时间用C语言写了个银行ATM系统,还写了一篇文章记录了一些,C语言的ATM文章。后来又用IDEA写了一个JAVA版本的银行ATM。有人就会问为啥浪费这个时间写ATM呢?🧐其实是我本科代码没学好,所以现在想利用比较熟悉的ATM系…

Spring Web MVC 快速入门

🎥 个人主页:Dikz12🔥个人专栏:Spring学习之路📕格言:吾愚多不敏,而愿加学欢迎大家👍点赞✍评论⭐收藏 目录 什么是Spring MVC? MVC模式介绍 ​编辑学习Spring MVC…

node.js对数据库mysql的连接与操作(增、删、改、查、五种SQL语法)

前提:先在vscode终端下载安装mysql:npm install mysql -save 步骤总结: (1)建立与数据库的连接 (2)做出请求: 实际上就是操作mysql里的数据。增删改查 insert、delete、updata、select (3)通过回调函数获取结果 一、什么是SQ…

【Kubernetes集群一主二从安装教程】

文章目录 环境准备主机间做信任安装ansible工具 升级内核版本使用elrepo源升级内核查看最新版内核安装最新的内核版本设置系统默认内核设置默认内核为我们刚才升级的内核版本 初始化关闭防火墙关闭selinux关闭swap修改主机名修改hosts文件将桥接的IPv4流量传递到iptables的链配…

nlp课设 - 基于BERT 的情感分类

基于BERT 的情感分类 主要论文: BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding(双向Transformer 的预训练) 核心技术: Embedding 、Attention --> Transformer 任务简介、拟解决问题…

09 - 数据清洗案例

流程图 kettle 面板图片 操作步骤 1、订阅数据源(kafka consumer) 2、抽取字段并转换key(JSON input) 3、判断img字段是否有值,有的话进行url转base64(JavaScript 代码) // 获取输入字段的值 v…

流量分析利器arkime的学习之路(三)---结合Suricata攻击检测

1、基础 Arkime安装部分参考《流量分析利器arkime的学习之路(一)—安装部署》 在此基础上安装suricata软件并配置。 2、安装suricata yum install suricate 可能依赖的文件包括libyaml,PyYAML,这些可能在之前安装arkime或者其他…

面试二十四、继承多态

一、继承的本质和原理 组合(Composition): 组合是一种"有一个"的关系,表示一个类包含另一个类的对象作为其成员。这意味着一个类的对象包含另一个类的对象作为其一部分。组合关系通常表示强关联,被包含的对象…

Terrain —— Nodes

目录 Convert HeightField —— 转化高度场 HeightField —— 为地形创建初始高度场或遮罩场 HeightField Blur —— 模糊高度场或遮罩场 HeightField Clip —— 限制高度场的值 HeightField Combine Layers —— 将多个volume或VDB合并为一个新的volume或VDB HeightFiel…

我独自升级崛起怎么玩 我独自升级崛起游玩教程分享

《我独自升级:ARISE》是一款预计在 Android、iOS 和 PC 平台推出的动作 RPG,故事内容基于网络漫画版本改编,讲述世界各地出现「次元传送门」,而少部分人类觉醒了可以对抗传送门中怪物的「猎人」能力,玩家可以在故事模式…

【进程等待】是什么 | 为什么 | 怎么办 | wait阻塞等待

目录 进程等待是什么? 为什么要进程等待? 如何进程等待? wait 阻塞等待 进程等待是什么? 进程终止会把进程退出的数据(退出码和退出信号)存放到进程的PCB中保存下来,让父进程进行等待。…

【投稿资讯】区块链会议CCF C -- CoopIS 2024 截止7.10 附录用率

会议名称:CoopIS CCF等级:CCF C类学术会议 类别:人机交互与普适计算 录用率:2023年接收率21% (21 regular 10 work-in-progress papers/100) AREA 5: HUMAN-CENTRIC SECURITY AND PRIVACY IN INFORMATION SYSTEMS Access Con…

Linux网站服务

1.概念:HTML:超级文本编辑语言 网页:使用HTML,PHP,JAVA语言格式书写的文件。 主页:网页中呈现用户的第一个界面。 网站:多个网页组合而成的一台网站服务器。 URL:统一资源定位符,访问网站的地址。 网站架构:LAMP: LinuxApacheMYSQLPHP(系统服务器程序数据管理…