SpringBoot源码透彻解析—bean生命周期

先跟一段debug再看总结:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1 创建实例

  1. InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(自定义一个对象或者代理对象)
  2. createBeanInstance(创建实例)
  3. MergedBeanDefinitionPostProcessor.postProcessMergedBeanDefinition(发现属性:@Value和@Autowired注解)

2 填充属性

  1. InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation(实例化后置处理器,最后一次机会修改beanDefinitinon)
  2. InstantiationAwareBeanPostProcessor.postProcessProperties(填充属性1:@Value和@Autowired注解)
  3. applyPropertyValues(属性填充2:beanDefinition里的propertyValues有值时)

3 初始化

  1. invokeAwareMethods:回调aware接口,注入spirng核心组件或上下文对象
  2. BeanPostProcessor.postProcessBeforeInitialization: @PostConstruct方法调用
  3. invokeInitMethods: 初始化
  4. BeanPostProcessor.postProcessAfterInitialization: 代理对象创建(AOP核心)

① 3-5:是一对,一个探测,一个填充;

AutowiredAnnotationBeanPostProcessor 针对的是@Value和@Autowired属性的探测和填充;
CommonAnnotationBeanPostProcessor 针对的是@Resource和@PostConstruct属性的探测和填充
探测都是同一个方法,但是,@Resource属性的填充是CommonAnnotationBeanPostProcessor.postProcessProperties

② @PostConstruct方法的调用是:CommonAnnotationBeanPostProcessor.postProcessBeforeInitialization)
③ 9:bean实现InitializingBean接口,回调afterPropertiesSet方法。
④ 10:AnnotationAwareAspectJAutoProxyCreator 创建代理对象。

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

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

相关文章

编程怎么学才高效?初学编程怎么样才容易入门?

学习编程并提高编程能力需要一种结构化的方法,其中包括理解基础概念、实践、反馈和持续学习。以下是一些高效学习编程的策略: 理解基础概念:在学习编程的初期,理解基础概念非常重要。这包括学习编程语言的基本语法、数据类型、控…

Java调用HTTPS接口,绕过SSL认证

1:说明 网络编程中,HTTPS(Hypertext Transfer Protocol Secure)是一种通过加密的方式在计算机网络上进行安全通信的协议。网络传输协议,跟http相比更安全,因为他加上了SSL/TLS协议来加密通信内容。 Java调…

算法与数据结构-分治算法

文章目录 什么是分治算法分治算法应用举例分析分治思想在海量数据处理中的应用 什么是分治算法 分治算法(divide and conquer)的核心思想其实就是四个字,分而治之 ,也就是将原问题划分成 n 个规模较小,并且结构与原问…

JavaEE入门介绍,HTTP协议介绍,常用状态码及含义,服务器介绍(软件服务器、云服务器)

一、JavaEE入门 JavaEE(Java Enterprise Edition),Java企业版,是一个用于企业级web开发(不需要使用控制台)平台。最早由Sun公司定制并发布,后由Oracle负责维护。 JavaEE平台规范了在开发企业级w…

3D RPG Course | Core 学习日记三:Navigation智能导航地图烘焙

前言 前面我们已经绘制好了一个简单的地图场景,现在我们需要使用Navigation给地图做智能导航,以实现AI自动寻路,以及设置地图的可行走区域以及不可行走区域,Navigation的基础知识、原理、用法在Unity的官方文档,以及网…

cocos creator,vscode打开脚本报错,找不到cc模块问题

cocosCreator,用VSCODE打开写脚本代码的时候,会误报飘红,但实际上能正常运行。 我的版本是当前最新版本的3.8.1 解决方案: 在CocosCreator 的安装目录下 C:\ProgramData\cocos\editors\Creator\3.8.1\resources\resources\3d\engine\bin.dec…

人工智能AI 全栈体系(十一)

第一章 神经网络是如何实现的 这些神经网络越来越复杂,都是用BP算法求解。网络有些变化就可能需要重新推导,而在实验过程中可能会做很多尝试,这样每次都重新推导BP算法太麻烦了。 十、深度学习框架 现在有了很多深度学习框架,这…

OPENCV 闭运算实验示例代码morphologyEx()函数

void CrelaxMyFriendDlg::OnBnClickedOk() {hdc this->GetDC()->GetSafeHdc();// TODO: 在此添加控件通知处理程序代码string imAddr "c:/Users/actorsun/Pictures/";string imAddr1 imAddr"rice.png";Mat relax, positive;relax imread(imAddr1…

【机器学习】二、决策树

目录 一、决策树定义: 二、决策树特征选择 2.1 特征选择问题 2.2 信息增益 2.2.1 熵 2.2.2 信息增益 三、决策树的生成 3.1 ID3算法 3.1.1理论推导 3.1.2代码实现 3.2 C4.5 算法 3.2.1理论推导 ​ 3.2.2代码实现 四、决策树的剪枝 4.1 原理 4.2 算法思路&#xff1a…

css position属性与js滚动

“视口”就是浏览器窗口中实际显示文档内容的区域,不包含浏览器的“外框”,如菜单、工具条和标签。文档则是指整个网页。 1 css 的position static 正常定位,是元素position属性的默认值,元素遵循常规流。 relative 相对定位&…

如何卸载干净 IDEA(图文讲解)windows和Mac教程

大家好,我是sun~ 很多小伙伴会问 Windows / Mac 系统上要怎么彻底卸载 IDEA 呢? 本文通过图片文字,详细讲解具体步骤: 如何卸载干净 IDEA(图文讲解) Windows1、卸载 IDEA 程序2、注册表清理3、残留清理 M…

云安全-云原生基于容器漏洞的逃逸自动化手法(CDK check)

0x00 docker逃逸的方法种类 1、不安全的配置: 容器危险挂载(挂载procfs,Scoket) 特权模式启动的提权(privileged) 2、docker容器自身的漏洞 3、linux系统内核漏洞 这里参考Twiki的云安全博客,下…

查询平均提速 700%,奇安信基于 Apache Doris 升级日志安全分析系统

本文导读: 数智时代的到来使网络安全成为了不可忽视的重要领域。奇安信作为一家领先的网络安全解决方案领军者,致力于为企业提供先进全面的网络安全保护,其日志分析系统在网络安全中发挥着关键作用,通过对运行日志数据的深入分析…

Go的命令行工具开发:使用Cobra库

今天我们将深入探讨如何使用Go语言和Cobra库来开发命令行工具。 命令行工具在软件开发中有着广泛的应用,它们快速、高效,且易于自动化。 Go语言因其简洁、高效而被广泛用于命令行工具的开发。Cobra库则是Go中用于构建命令行工具的重要库之一。 为什么选…

C/C++ sizeof

介绍 sizeof 是一个关键字、操作符,也是一个编译时运算符 作用:返回一个对象或者类型所占的内存字节数 使用方法 sizeof(type_name);//sizeof(类型) sizeof(object);//sizeof(对象) 注意: sizeof 操作符不能用于函数类型,不…

MyBatis-Plus返回getOne返回null疑惑

getOne返回null 问题描述分析过程总结 问题描述 在数据库建了一张表主要包括两个字段master_id和slave_id;主要的额外字段max_lots 默认值是null; 当调用getOne进行查询结果是null,但实际情况是数据库时应该返回值的; AotfxMasterSlave ex…

【Unity】Addressables资源管理笔记

【Unity】Addressables资源管理笔记 Addressables是一种用于管理资源的系统。允许以一种灵活的方式加载、卸载和管理资源,无论是场景、预制件、材质、纹理、音频剪辑等。 一、快速实现 安装Addressables插件 把对象添加到组 1)打开AddressablesGroups面…

接口测试 —— Jmeter 之测试片段的应用

一、什么是测试片段? 控制器上一种特殊的线程组,它与线程组处于一个层级。与线程组不同的就是:测试片段不会执行。它是一个模块控制器或者被控制器应用时才会被执行。通常与Include Controller或模块控制器一起使用。 1.1 那它有啥作用&…

在excel中如何打出上标、下标

例如,想把A2的2变为下标。 在单元中输入内容: 选中2: 右键单击,然后点击“设置单元格格式”: 在特殊效果的下面勾选“下标”,然后点击下面的“确定”按钮: 就将2变为下标了:…

2021-arxiv-LoRA Low-Rank Adaptation of Large Language Models

2021-arxiv-LoRA Low-Rank Adaptation of Large Language Models Paper: https://arxiv.org/abs/2106.09685 Code: https://github.com/microsoft/LoRA 大型语言模型的LoRA低秩自适应 自然语言处理的一个重要范式包括对通用领域数据的大规模预训练和对特定任务或领域的适应。…