Spring源码相关

news2024/11/18 1:27:16

总分结构回答,突出关键接口、类、方法名

run -> AbstractApplicationContext.refresh()程序的入口

在IOC中的操作都是基于DefaultListableBeanFactory

bd对象保存在map集合中


refresh方法宝包括了整个Spring的执行流程和bean的完整生命周期
某些情况下实例化bean的过程比较复杂,可以实现BeanFactory接口定制bean的实例化逻辑

Spring是如何检测是否存在循环依赖的:
使用列表来记录正在创建中的bean,bean创建之前,先去记录中看一下是否在列表中,如果在说明存在循环依赖,如果不在,则将其加入到这个列表,bean创建完毕之后,将其再从列表中移除

问题1:谈谈对SpringIoc的理解

名词及注意:

循环依赖得以解决的根本愿意:Spring中bean的实例化和初始化是分开执行的

RuntimeBeanReference

三级缓存访问顺序:一级-》二级-》三级

objectFactories中保存的是lambda,当调用getObeject时,才会真正执行代码

优点:类似于回调机制,可以选择暴露

三级缓存放前提:

判断是否允许提前暴露  (单例bean、bean正在创建过程中、允许循环引用)

——————————————————————————————————————————

BeanFacoty:访问ioc容器的根接口

IOC Inversion of Controller(控制反转):关键点:谁控制谁?控制了什么? ioc不是一种技术,而是一种思想,在程序中主动控制对象的创建转为接受容器为调用者的成员进行赋值。

Spring提供了一个IOC容器对这种思想进行了落地实现,使用map结构来进行对象存储,ioc容器中通常存在三级缓存,使用singletonObjects保存成品对象,earlierSingletonObjects保存的是半成品对象,singletonFactories保存的是创建对象的工厂,bean对象的生命周期是IOC容器所管理的

BeanFactory,表示SpringIOC容器,实现类为DefaultListableBeanFactory【bean实例化和获取的具体类】

在IOC流程中,先是获取了一个BeanFactory的实现类DefaultListableBeanFactory(后续的操作都是基于此实例进行的),调用prepareFactory方法做了一些准备工作,各种(属性填充)bd对象在此载入(来源@ComponentScan @Import @Configuration xml ),生成相应的bd对象,。【在invokeBeanFactoryPostProcessors 前bd对象就存在,不过不是完整的bd对象,

bd对象的注册(也就是配置文件的读取是在实例化ApplicaitonContext过程中就完成的)

xml的注册  xml - 》dom4j -> document ->nodeList

注解:获取要扫描的类,判断类上是否存在注解  

BeanFactoryPostProcessors是Spring的一个拓展点,(二次开发使用较多)】对BeanFactory提供了额外的拓展操作,如:字符串的替换

finishBeanFactoryInitialization中完成bean对象的创建和初始化工作 

方法调用过程:getBean -》doGetBean -》createBean -> doCreateBean -populateBean

流程:获取所有的beanName(注意不是从bd对象中获取)

以A中依赖bean,B中依赖A为例,总共需要执行两次该过程
1.从三级缓存中查找是否存在bean,不存在根据beanName获取bd对象,根据bd对象判断是否是单例bena,分支-》单列bean和原型bean创建

创建bean:

createBeanInstance:创建bean实例

允许提前暴露,则将创建bean的factory添加到三级缓存中

populateBean bean属性的填充 

population中进行:获取要注入属性的RuntimeBeanReference,进行解析,getBean

先实例化A

此时三级缓存中已经有对象A和对象B

第三遍getBean(当查看三级缓存中存在对象A时【将A对象存入二级缓存中,并删除三级缓存中对的A对象】,返回实例化对象)

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

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

相关文章

【Postman-windows-9.12.2版本安装与汉化】

Postman-windows-9.12.2版本安装与汉化 想用英文版本的可以直接点击如下链接下载最新版本 官网最新版本(无法汉化):https://www.postman.com/downloads/ 如果想要汉化的就不能使用最新版本,因为最新版本没有汉化包可以用 汉化包和postman的版本必须是…

RFID技术在危险品仓库中的综合应用

危险仓库内的危化品存放、隔离、堆放数量等需要严格的管控。危险化学品自身所具有的易爆、易燃、毒害、腐蚀、放射等性导致其在生产、经营、存储、运输、使用、废弃处置的过程中安全尤为重要,RFID技术应用避免人为误操作,实现危险品的自动安全核查和规范…

win10家庭版安装docker desktop问题

一、WSL kernel version too low 1、power shell,运行升级命令 wsl --update 2、官网下载wsl2更新包安装 二、Unexcepted WSL error 未找到解决方法,看来只能老老实实用win专业版了。

用go实现http服务端和请求端

一、概述 本文旨在学习记录下如何用go实现建立一个http服务器,同时构造一个专用格式的http客户端。 二、代码实现 2.1 构造http服务端 1、http服务处理流程 基于HTTP构建的服务标准模型包括两个端,客户端(Client)和服务端(Server)。HTTP 请求从客户端…

单片机涉及到这么多行业?

单片机在众多行业中都有广泛应用。汽车电子领域使用单片机来控制引擎、制动系统、安全系统等,提升车辆性能和安全性。不懂的可以看看这一套学习资料包,里面涵盖了一整个嵌入式行业教学资料,不论是小白入门还是精通进阶都包括在内,…

全面提升AD域安全认证 | 竹云IDaaS

传统的微软Active Directory目录已无法适应企业多样化的业务需求,借助身份云您可以快速整合企业本地、云端资源,从而使AD域管理变得更简单、安全、高效。 企业面临的挑战 AD域无法整合现代化系统 AD域仅支持 LDAP 、Kerberos 协议,不能整合…

uniapp 路由模式 history

亲测、比如 uniapp 的 H5 配置: nginx 配置如下,只影响网站下某个目录: location ^~ /test {try_files $uri $uri/ /test/index.html; }

HAProxy Data Plane API 实现对 haproxy 的配置管理

文章目录 前言一、安装1. 下载HAProxy Data Plane API2. 创建 Data Plane API 配置文件 /etc/haproxy/dataplaneapi.hcl3. 修改haproxy的配置文件 二、简单使用1. 查询请求2. 提交修改请求 总结 前言 我们平时对 haproxy 配置的修改,往往是 SSH 连接进去节点&#…

竞赛 基于深度学的图像修复 图像补全

1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学的图像修复 图像补全 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-se…

孙哥Spring源码第25集

第25集、处理代理中获取代理进行方法调用 0、问题所在 1、实现ApplicationContextAware接口实现代理 它的处理是在ApplicationContextAware中处理的 2、ExposeProxy分析 整体 分析 如何设置成了false就会有下面的问题 3、使用EnableAspectJAutoProxy解决代理问题 4、到底如何…

让自己敲代码的速度起飞

前言 打字速度可以说是成为一名程序员的基本功,程序员的打字速度在工作中越来越重要,下面就为大家分享一下我在联系打字速度的时候一些小经验,希望对大家有帮助。 刚开始学习编程的时候,我每天都会抽出1个小时进行打字练习&…

微信小程序实现拍照并拿到图片对象功能

微信小程序提供了函数chooseImage 我们可以在wxml中定义一个按钮 <view><button bindtap"photograph">拍照</button> </view>这里绑定了一个点击事件 叫 photograph 然后 我们在js中编写代码如下 //import { getAll } from "../../ap…

在B站上如何把已经上传的视频做成合集?

参考视频: 【在B站上如何把已经上传的视频做成合集&#xff1f;】 https://www.bilibili.com/video/BV1Uf4y1G7eR/?share_sourcecopy_web&vd_source8af85e60c2df9af1f0fd23935753a933 【B站投稿视频合集的几种方式最全攻略】 https://www.bilibili.com/video/BV1jZ4y1h7…

LLM-TAP随笔——大语言模型基础【深度学习】【PyTorch】【LLM】

文章目录 2.大语言模型基础2.1、编码器和解码器架构2.2、注意力机制2.2.1、注意力机制&#xff08;Attention&#xff09;2.2.2、自注意力机制&#xff08;Self-attention&#xff09;2.2.3、多头自注意力&#xff08;Multi-headed Self-attention&#xff09; 2.3、transforme…

Unity之Hololens如何实现3D物体交互

一.前言 什么是Hololens? Hololens是由微软开发的一款混合现实头戴式设备,它将虚拟内容与现实世界相结合,为用户提供了沉浸式的AR体验。Hololens通过内置的传感器和摄像头,能够感知用户的环境,并在用户的视野中显示虚拟对象。这使得用户可以与虚拟内容进行互动,将数字信…

【算法】算法设计与分析 课程笔记 第二章 递归与分治策略

2.1 递归 直接或间接地调用自身的算法称为递归算法。 用函数自身给出定义的函数称为递归函数。 2.1.1 阶乘 首先得想到一个求阶乘的函数&#xff1a; 这个函数的下面那个式子就用到了调用自身&#xff0c;所以可以用递归来实现&#xff0c;将主问题拆分成若干层的子问题&am…

分享从零开始学习网络设备配置--任务3.7 使用动态路由RIPv2实现网络连通

任务描述 某公司随着规模的不断扩大&#xff0c;路由器的数量开始有所增加。网络管理员发现原有的静态路由已经不适合现在的公司&#xff0c;实施动态路由RIPv2协议配置&#xff0c;实现网络中所有主机之间互相通信。 在路由器较多的网络环境中&#xff0c;手工配置静态路由…

Level FHE 的高效实现 兼容 Level FHE 的高级算法

参考文献&#xff1a; [CS05] Choi Y, Swartzlander E E. Parallel prefix adder design with matrix representation[C]//17th IEEE Symposium on Computer Arithmetic (ARITH’05). IEEE, 2005: 90-98.[SV11] Smart N P, Vercauteren F. Fully homomorphic SIMD operations[…

基于微信小程序的校园商铺系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言学生端微信端&#xff0c;主要功能有&#xff1a;商家的主要功能有&#xff1a;管理员的主要功能有&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 …

商家收款2000手续费多少

目前不管是微信商户或者支付宝商户最低费率可以达到0.2%费率&#xff1b;市面上普通个体商户或者企业商家的收款费率一般在0.6左右&#xff0c;一些使用第三方聚合支付平台的也有使用0.38的&#xff0c;总体也就是10000块钱的费率是38-60块钱&#xff0c;对于一些流水比较大的商…