图解 Spring Bean 生成流程,非常详尽
程序员的成长之路
共 8070字,需浏览 17分钟
· 2023-11-09
阅读本文大概需要 10 分钟。
来自:blog.csdn.net/u011709538/article/details/129303025
-
1引言 -
2创建Bean的极简流程 -
3后置处理器(PostProcessor) -
BeanFactoryPostProcessor -
BeanPostProcessor -
契机问题的解决 -
4引用与缓存 -
引用已有的Bean -
引用未创建的Bean -
循环引用(循环依赖) -
循环引用中的代理 -
5三级缓存的解读 -
6创建Bean的极详细流程
有一个大型项目因为安全漏洞的原因要进行升级,需要从springboot1.0升级至springboot2.0,但发现springboot2的默认动态代理方式为CGLIB,而项目上很多地方利用的jdk代理对接口做了增强,切换至CGLIB导致了大量问题。根据百度的内容,设置了 proxy-target-class=“false”
,然而不起作用,最后发现是某一个三方包内设置了proxy-target-class=“true”
,而这个属性只要在工程里任何地方设置过一次true,都会导致代理管理器的同名属性为true,最终采用CGLIB代理,那么有什么简单方式可以解决这个问题
1引言
-
代理对象是何时生成的? -
循环依赖是怎么解决的? -
能说说对Springr容器三级缓存的理解吗?
2创建Bean的极简流程
-
获取Bean定义
-
生成实例
-
属性装填
-
初始化
InitializingBean
接口,则会调用你写在afterPropertiesSet
方法里的内容。
3后置处理器(PostProcessor)
-
一类是针对Bean工厂的 BeanFactoryPostProcessor
-
一类是针对Bean的 BeanPostProcessor
BeanFactoryPostProcessor
针对Bean工厂(它还有个子接口BeanDefinitionRegistryPostProcessor
),调整Bean工厂的属性、影响Bean定义,注意此时还没有Bean进行实例化。BeanPostProcessor
则更直接的作用于Bean实例生成过程中的修改。
BeanFactoryPostProcessor
MapperFactoryBean.class
,即工厂类,然后把它添加到Bean定义注册器中。
getObject()
为我们取出一个Bean实例,这个Bean实例是使用我们写的Mapper接口产生的代理,而后再把这个代理放入Spring容器
BeanPostProcessor
契机问题的解决
org.springframework.aop.config.internalAutoProxyCreator
,它有一个属性proxy-target-class
,这个属性决定了Spring动态代理的生成用的jdk动态代理还是CGlib,然而在很多地方(三方包)已经给他赋值。
4引用与缓存
引用已有的Bean
引用未创建的Bean
getEarlyBeanReference
获取到这个未完成的Bean(蛋)。
循环引用(循环依赖)
SingletonCurrentlyInCreation
的Set集合里。
循环引用中的代理
wrapIfNecessary
,因此生成代理的效果是一样的。当然你也许仍然有顾虑,对成品和半成品生成代理真的没差别吗?
5三级缓存的解读
6创建Bean的极详细流程
推荐阅读:
互联网初中高级大厂面试题(9个G) 内容包含Java基础、JavaWeb、MySQL性能优化、JVM、锁、百万并发、消息队列、高性能缓存、反射、Spring全家桶原理、微服务、Zookeeper......等技术栈!
⬇戳阅读原文领取! 朕已阅
评论
OpenUI:输入一段文字就能生成网!页!!
今天给大家介绍一个开源的 AI 网页生成工具:OpenUI!!!前言 在软件开发领域,用户界面(UI)的设计和构建确实是一个至关重要的环节。传统的 UI 开发需要设计师和开发人员紧密合作,通过反复的设计、修改和测试来达到理想的效果,这个过程往往耗时且成本较高。随着 AI 技术的发展,现在有越来越多的
前端技术江湖
0
图解 transformer 中的自注意力机制
↓推荐关注↓本文将将介绍注意力的概念从何而来,它是如何工作的以及它的简单的实现。注意力机制在整个注意力过程中,模型会学习了三个权重:查询、键和值。查询、键和值的思想来源于信息检索系统。所以我们先理解数据库查询的思想。假设有一个数据库,里面有所有一些作家和他们的书籍信息。现在我想读一些Rabindra
Python学习与数据挖掘
0
Spring Boot + flowable 快速实现工作流
关注我们,设为星标,每天7:40不见不散,架构路上与您共享回复架构师获取资源大家好,我是你们的朋友架构君,一个会写代码吟诗的架构师。来源:blog.csdn.net/zhan107876/article/details/120815560总览一、flowable-ui部署运行二、绘制流程图绘图细节:
Java架构师社区
0
图解操作系统、网络、计算机组成PDF下载!
我去年去面试的时候发现字节跳动、腾讯这类大厂非常非常重视计算机基础,像计算机网络、操作系统都是它们的重点。我当时因为计算机基础知识准备的还可以才拿到了这些大厂的 Offer!今天就给大家分享一下我之前面试经常看的一些关于计算机基础的 PDF 资料!图解计算机系统《图解系统》主要是操作系统的内容比较多
java1234
0
Spring Boot 优雅实现多租户架构
来源:blog.csdn.net/u010349629/article/details/130737253👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 2.0
小哈学Java
1448
图解 SQL 执行顺序,通俗易懂!
来源:blog.csdn.net/weixin_44141495/article/details/108744720/数据的关联过程from&join&wheregroup byhaving&whereselectorder bylimit这是一条标准的查询语句:图片这是我们
Java专栏
4824
美团一面:为什么 Spring 和 IDEA 都不推荐使用 @Autowired 注解??
点击关注公众号,Java 干货及时推送↓推荐阅读:铜三铁四,怒拿 35K * 14 薪!作者:小亮哥Ya链接:https://juejin.cn/post/7080441168462348319大家在使用IDEA开发的时候有没有注意到过一个提示,在字段上使用Spring的依赖注入注解@Au
Java技术栈
0
【Nucleic Acids Research】利用生成式深度学习模型设计蓝藻细菌的合成启动子
题目:Design of synthetic promoters for cyanobacteria with generative deep-learning model期刊:Nucleic Acids Research影响因子:19.16发表时间:2023.5.29原文作者:Euijin Seo
生信宝典
0