
获得徽章 14
【vue3-element-admin】Vue3 + Vite4 + TypeScript5 + Element-Plus + 从0到1搭建企业级后台管理系统(前后端开源)。在线预览:
vue3.youlai.tech
赞过12youlai-mall 是基于SpringBoot 2.7、SpringCloud & Alibaba 、vue3、element-plus、uni-app 构建的开源全栈商城。SpringBoot 3+Spring Authorization Server 1.1 即将发布。
赞过11【vue3-element-admin】Vue3 + Vite4 + TypeScript5 + Element-Plus + 从0到1搭建企业级后台管理系统(前后端开源)。在线预览:vue3.youlai.tech
赞过11youlai-mall 是基于SpringBoot 2.7、SpringCloud & Alibaba 、vue3、element-plus、uni-app 构建的开源全栈商城。SpringBoot 3+Spring Authorization Server 1.1 即将发布
赞过11- #每天一个知识点# Spring 是如何解决循环依赖的?附Spring 6源码编译教程,仓库地址:
gitee.com
在Spring中,当两个或多个bean之间存在相互依赖关系时,就会发生循环依赖。如果没有特殊处理,这将导致bean创建失败或出现无限递归。为了解决这个问题,Spring使用了三级缓存,它们分别是singletonObjects、earlySingletonObjects和singletonFactories。
第一级缓存是singletonObjects,它用于存储完全初始化的单例bean。当Spring创建一个bean时,它会首先检查singletonObjects中是否已经存在该bean的实例。如果是,Spring将立即返回该实例,从而避免了循环依赖。
如果singletonObjects中不存在该bean的实例,Spring将尝试创建它。在创建bean的过程中,如果发现它依赖于另一个正在创建的bean,则Spring将把这个bean的早期引用存储在earlySingletonObjects中。这个早期引用是一个未完全初始化的bean实例,它允许Spring在创建另一个bean时解决循环依赖。
如果在创建过程中发现循环依赖链上的任何一个bean需要访问另一个尚未完成的bean实例,Spring将会在singletonFactories中存储一个ObjectFactory,以便在需要时创建该依赖的bean实例。
当bean创建完成后,Spring将从earlySingletonObjects中移除该bean的早期引用,并将其添加到singletonObjects缓存中。此时,如果有其他bean依赖于该bean,则它们将使用完全初始化的bean实例。
总之,Spring使用三级缓存来解决循环依赖问题,这样可以避免bean创建失败或出现无限递归。展开赞过11 【vue3-element-admin】Vue3 + Vite4 + TypeScript5 + Element-Plus + 从0到1搭建企业级后台管理系统(前后端开源)。在线预览:
vue3.youlai.tech
赞过21youlai-mall 是基于SpringBoot 2.7、SpringCloud & Alibaba 、vue3、element-plus、uni-app 构建的开源全栈商城。SpringBoot 3+Spring Authorization Server 1.1 即将发布
赞过13youlai-mall 是基于SpringBoot 2.7、SpringCloud & Alibaba 、vue3、element-plus、uni-app 构建的开源全栈商城。SpringBoot 3+Spring Authorization Server 1.1 即将发布。
等人赞过14- 【vue3-element-admin】Vue3 + Vite4 + TypeScript5 + Element-Plus + 从0到1搭建企业级后台管理系统(前后端开源)。在线预览:
vue3.youlai.tech
赞过评论2 - #每天一个知识点# Spring Bean的生命周期包括以下阶段:
1. 实例化:Spring容器根据Bean的定义创建Bean的实例。这通常涉及到调用Bean的构造函数。
2. 属性赋值:Spring容器将依赖注入到Bean中。这通常涉及到调用Bean的setter方法或直接访问Bean的字段。
3. 初始化:如果Bean实现了InitializingBean接口,Spring容器会调用它的afterPropertiesSet()方法。如果Bean定义了init-method属性,Spring容器会调用指定的方法。如果Bean使用了@PostConstruct注解标记了初始化方法,Spring容器会在依赖注入完成之后调用该方法。
4. 使用:Bean可以被应用程序使用。
5. 销毁:如果Bean实现了DisposableBean接口,Spring容器会在应用程序关闭时调用它的destroy()方法。如果Bean定义了destroy-method属性,Spring容器会调用指定的方法。展开赞过11
个人成就