Spring源码第16章中,如何详细解析Spring Bean的属性填充步骤?

2026-05-27 17:170阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1541个文字,预计阅读时间需要7分钟。

Spring源码第16章中,如何详细解析Spring Bean的属性填充步骤?

回顾上篇介绍了Spring中的三级缓存singletonObjects、earlySingletonObjects、singletonFactories。Spring在处理循环依赖时,在实例化后先填充属性之前,将一个lambda表达式放在了三级缓存中。

知识回顾

上一篇介绍了Spring中三级缓存的singletonObjectsearlySingletonObjectssingletonFactoriesSpring在处理循环依赖时在实例化后属性填充前将一个lambda表达式放在了三级缓存中,后续在获取时进行了判断,如果不需要进行对象代理,那么直接返回对象Bean,然后将三级缓存中的对象删除,然后放在二级缓存中,后面在初始化之后又将二级缓存中的对象放在了一级缓存中,然后删除了二级缓存中的对象。

然后介绍了Spring在进行代理对象的创建时,会使用SmartInstantiationBeanPostProcessor接口的getEarlyBeanReference方法进行创建,创建的时候会调用到AbstractAutoProxyCreator类的实现,最终以JDK或者CGLIB的方式进行代理的创建,当然这些细节讲的不是很清晰,只是梳理了大致脉络,后续还会进行较为详细的梳理,敬请期待。

接下来继续主流程的解析,Bean的属性填充。

阅读全文

本文共计1541个文字,预计阅读时间需要7分钟。

Spring源码第16章中,如何详细解析Spring Bean的属性填充步骤?

回顾上篇介绍了Spring中的三级缓存singletonObjects、earlySingletonObjects、singletonFactories。Spring在处理循环依赖时,在实例化后先填充属性之前,将一个lambda表达式放在了三级缓存中。

知识回顾

上一篇介绍了Spring中三级缓存的singletonObjectsearlySingletonObjectssingletonFactoriesSpring在处理循环依赖时在实例化后属性填充前将一个lambda表达式放在了三级缓存中,后续在获取时进行了判断,如果不需要进行对象代理,那么直接返回对象Bean,然后将三级缓存中的对象删除,然后放在二级缓存中,后面在初始化之后又将二级缓存中的对象放在了一级缓存中,然后删除了二级缓存中的对象。

然后介绍了Spring在进行代理对象的创建时,会使用SmartInstantiationBeanPostProcessor接口的getEarlyBeanReference方法进行创建,创建的时候会调用到AbstractAutoProxyCreator类的实现,最终以JDK或者CGLIB的方式进行代理的创建,当然这些细节讲的不是很清晰,只是梳理了大致脉络,后续还会进行较为详细的梳理,敬请期待。

接下来继续主流程的解析,Bean的属性填充。

阅读全文