高频:spring知识

1、bean的生命周期?

主要阶段

初始化

org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh

信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@67424e82: startup date []; root of context hierarchy

org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions

信息: Loading XML bean definitions from class path resource [spring-bean.xml]

{BeanFactoryPostProcessor} 【Constructor】 Method

{BeanFactoryPostProcessor} 【postProcessBeanFactory】 Method

{InstantiationAwareBeanPostProcessor} 【Constructor】 Method

{BeanPostProcessor} 【Constructor】 Method

{InstantiationAwareBeanPostProcessor} 【postProcess[Before]Instantiation】 Method

{AccountBean} 【Constructor】 Method

{InstantiationAwareBeanPostProcessor} 【postProcess[After]Instantiation】 Method

{InstantiationAwareBeanPostProcessor} 【postProcessPropertyValues】 Method,[Bean] = AccountBean{accountNo='null', openDate='null'}, [BeanName] = accountBean

{AccountBean} 的【setAccountNo】方法

{AccountBean} 的【setOpenDate】方法

{BeanNameAware} 的【setBeanName】方法

{BeanFactoryAware} 的【setBeanFactory】方法

{InstantiationAwareBeanPostProcessor} 【postProcess[Before]Initialization】 Method

{BeanPostProcessor} 的【postProcess[Before]Initialization】方法【beanName】: accountBean

{InitializingBean} 的【afterPropertiesSet】方法

{AccountBean} 的【init-method】方法

{InstantiationAwareBeanPostProcessor} 【postProcess[After]Initialization】Method

{BeanPostProcessor} 的【postProcess[After]Initialization】方法【beanName】: accountBean

AccountBean{accountNo='00001', openDate='2017-12-05'}

关闭

org.springframework.context.support.ClassPathXmlApplicationContext doClose

信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@67424e82: startup date [Sun Dec 10 15:35:01 CST 2017]; root of context hierarchy

{DisposableBean} 的【destroy】方法

{AccountBean} 的【destroy-method】方法

2、三级缓存是如何解决循环依赖的?

三级缓存

Spring 三级缓存指的是 Spring 在解决循环依赖问题时所采用的三级缓存机制,分别是:

1. 一级缓存:单例对象缓存(Singleton Objects Cache),用于存储已经创建好的单例 Bean 实例。缓存键为 Bean 名称,值为 Bean 实例。

2. 二级缓存:早期单例对象缓存(Early Singleton Objects Cache),用于存储已经实例化但尚未完成初始化的早期 Bean 实例。缓存键为 Bean 名称,值为 Bean 实例。

3. 三级缓存:单例对象工厂缓存(Singleton Objects Factory Cache),用于存储创建单例 Bean 实例的工厂对象。缓存键为 Bean 名称,值为 ObjectFactory 实例。

这三级缓存协同工作,解决了 Spring 容器中单例 Bean 的循环依赖问题。

执行流程

在 Spring 创建 Bean 的过程中,会在以下阶段将 Bean 放入三级缓存:

1. 一级缓存:当 Bean 完全创建好并完成初始化后,Spring 会将其放入一级缓存。这意味着 Bean 已经被填充了属性值,执行了初始化方法(如 `@PostConstruct` 注解的方法或 `afterPropertiesSet()` 方法),并且应用了相关的 Bean 后置处理器。

2. 二级缓存:当 Bean 实例化完成(通过构造器创建实例)但尚未完成初始化时,Spring 会将其放入二级缓存。这意味着 Bean 已经创建了实例,但尚未填充属性值和执行初始化方法。

3. 三级缓存:在 Bean 实例化之前,Spring 会将创建 Bean 实例的工厂对象(`ObjectFactory`)放入三级缓存。这个工厂对象负责创建和初始化 Bean 实例。

3、AOP实现原理?

什么是AOP?

  1. AOP 是 Aspect Oriented Programming(面向切面编程) 的简称,和OOP(面向对象编程)一样是一种编程思想,是对OOP的一种补充。

  2. AOP旨在将横切关注点(crosscutting concern)从业务主体逻辑中进行剥离,实现关注点分离,以提高程序的模块化程度(及业务模块只需关注业务逻辑,无需关注日志、安全、事务等通用逻辑)

Spring AOP的动态代理有2种实现方式

  1. JDK动态代理(JDKDynamicAopProxy):基于接口实现,底层基于反射

  2. CGLIB动态代理(CGLIBAopProxy):基于继承实现

Spring 如何选择动态代理方式 ?(以Spring 4.3.17为例)

源码见:DefaultAopProxyFactory - > createAopProxy

  • 当代理对象实现了接口时,Spring默认使用JDK的动态代理。

  • 当Bean没有实现接口时,Spring默认使用CGLIB动态代理。

  • 当代理对象实现了接口时,也可以强制使用CGLIB(在spring配置中加入<aop:aspectj-autoproxy proxy-target-class="true"/>)

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

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

相关文章

数据结构:7、队列

一、队列的概念与结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出FIFO(First In First Out) 入队列&#xff1a;进行插入操作的一端称为队尾 出队列&#xff1a;进行删除操作的一端称为队头…

动态规划概念

前言 动态规划&#xff08;Dynamic Programming&#xff0c;DP&#xff09;是一种优化问题求解方法&#xff0c;通常用于解决具有重叠子问题和最优子结构性质的问题。它的基本思想是将原问题分解成更小的子问题&#xff0c;通过求解和保存这些子问题的解&#xff0c;避免重复计…

电商数据分析20——电商平台用户分层与细分策略的数据分析

目录 写在开头1. 用户分层与细分的重要性1.1 用户分层与细分的定义1.2 对电商营销策略的影响2. 数据分析在用户分层与细分中的应用2.1 用户行为数据的收集与分析2.1.1. 数据收集机制2.1.2. 关键用户行为指标2.2 用户属性和行为的聚类分析2.2.1. 聚类分析在用户细分中的应用2.2.…

漫途桥梁结构安全监测方案,护航桥梁安全!

桥梁作为城市生命线的重要组成部分&#xff0c;承载着城市交通、物流输送、应急救援等重要职能。然而&#xff0c;随着我国社会经济的飞速发展&#xff0c;桥梁所承载的交通流量逐年增长&#xff0c;其安全性所面临的挑战亦日益严峻。例如恶劣的外部环境、沉重的荷载以及长期使…

memmove函数及其模拟实现

一、用法 memmove用于拷贝字节&#xff0c;如果目标区域和源区域有重叠的话&#xff0c;memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中&#xff0c;但复制后源内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。 二、原型&#xff1a…

每天一个数据分析题(二百零七)

对某公司网站主色选择蓝色或紫色的两种方案进行对比测试&#xff0c;步骤可以不包括&#xff08;&#xff09; A. 提交审批&#xff1a;需经公司领导层会议决策通过 B. 确定目标&#xff1a;增加网站点击率 C. 开始实验: 网站主色,分为蓝色(A)和紫色(B)两个版本。其余网站元…

Linux下安装Android Studio及创建桌面快捷方式

下载 官网地址&#xff1a;https://developer.android.com/studio?hlzh-cn点击下载最新版本即可 安装 将下载完成后文件&#xff0c;进行解压&#xff0c;然后进入android-studio-2023.2.1.23-linux/android-studio/bin目录下&#xff0c;启动studio.sh即可为了更加方便的使…

MySQL学习Day32——数据库备份与恢复

在任何数据库环境中&#xff0c;总会有不确定的意外情况发生&#xff0c;比如例外的停电、计算机系统中的各种软硬件故障、人为破坏、管理员误操作等是不可避免的&#xff0c;这些情况可能会导致数据的丢失、 服务器瘫痪等严重的后果。存在多个服务器时&#xff0c;会出现主从服…

MATLAB使用OMP实现图像的压缩感知实例

OMP(Orthogonal Matching Pursuit)是一种用于稀疏信号恢复的迭代算法。它的目标是从一组测量值中重建具有少量非零元素的信号。 基本步骤 以下是OMP算法的简要步骤: 初始化残差: 将残差初始化为测量向量。 迭代过程: a. 原子选择: 在每次迭代中,从字典中选择与当前残差…

Codeforces Round 825 D. Equal Binary Subsequences 【思维】

D. Equal Binary Subsequences 题意 给定一个长度为 2 n 2n 2n 的 01 01 01 字符串 s s s&#xff0c;现在需要恰好使用一次下面的操作&#xff0c;将其划分为相等的两个子序列 定义操作&#xff1a; 选择某些下标&#xff0c;并这些下标代表的子序列向右循环移动一位 如…

SSA-LSTM多输入分类预测 | 樽海鞘优化算法-长短期神经网络 | Matlab

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&am…

Go Zero微服务个人探究之路(十六)回顾api服务和rpc服务的本质

目录 前言 正文 API&#xff08;Application Programming Interface&#xff09; RPC&#xff08;Remote Procedure Call&#xff09; API 与 RPC 的关系 分布式部署 API 和 RPC 结语 前言 go-zero 是一个基于 Go 语言的微服务框架&#xff0c;它提供了一套简洁的编程模…

code摘录日记[矩阵变元素,变列向量,3D表面图] Matlab

W1(Z1 < Z2) nan; % Z1,Z2 all matrix,Only plot points where Z1 > Z2;Z1 < Z2位置值填为NaNx x(:); % Now x is a 30-by-1 vector; matrix变列vector技巧hand figure; % Handle to the figure, for more plotting later set(gcf,Color,w) % White background sur…

图像处理与图像分析—图像统计特性的计算(纯C语言实现灰度值显示)

根据输入的灰度图像&#xff0c;分别计算图像的均值、方差等统计特征&#xff0c;并计算图像的直方图特征并以图形方式显示图像的直方图&#xff08;用C或C语言实现&#xff09;。 学习将会依据教材图像处理与图像分析基础&#xff08;C/C&#xff09;版内容展开 在上个笔记中&…

C语言排序算法

int main() { int i; int arr[]{49,38,65,97,76,13,27,49}; int nsizeof(arr)/sizeof(arr[0]); //数据开始的排列 for(i0;i<n;i) { printf("%d ",arr[i]); } printf("\n"); //排序后 InsertSort(arr,n…

机器学习-0X-神经网络

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中神经网络算法。 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程化接口实现 参考 机器学习定义 关于机…

GEE错误——Layer 2: Tile error: Reprojection output too large (10277x10480 pixels).

错误 Layer 2: Tile error: Reprojection output too large (10277x10480 pixels). Layer 2: Tile error: Reprojection output too large (10150x10479 pixels). Output of image computation is too large (18 bands for 3150625 pixels = 240.4 MiB > 80.0 MiB). 如果我…

Oracle P6 负浮时和必须完成日期

前言 学习过计划的人大都有这有这样的经历&#xff0c;即无论是Microsoft Project 亦或是P6见过负浮时那么 Primavera P6 计划中的负浮时是从何而来的呢&#xff0c;那么本文可能会有所帮助。 首先&#xff0c;当活动的最晚日期早于最早日期时&#xff0c;就会出现负浮时。 换…

Linux动态追踪——ftrace

目录 摘要 1 初识 1.1 tracefs 1.2 文件描述 2 函数跟踪 2.1 函数的调用栈 2.2 函数调用栈 2.3 函数的子调用 3 事件跟踪 4 简化命令行工具 5 总结 摘要 Linux下有多种动态追踪的机制&#xff0c;常用的有 ftrace、perf、eBPF 等&#xff0c;每种机制适应于不同的场…

uniapp h5 部署

uniapp 配置 服务器文件路径 打包文件结构 //nginx 配置 server {listen 8300;server_name bfqcwebsiteapp;charset utf-8;#允许跨域请求的域&#xff0c;* 代表所有add_header Access-Control-Allow-Origin *;#允许带上cookie请求add_header Access-Control-Allow-C…