基础篇:IoC(三):Bean实例化策略InstantiationStrategy

一、Bean实例化策略InstantiationStrategy

代码分支:instantiation-strategy

现在bean是在AbstractAutowireCapableBeanFactory.doCreateBean方法中用beanClass.newInstance()来实例化,仅适用于bean有无参构造函数的情况。

针对bean的实例化,抽象出一个实例化策略的接口InstantiationStrategy,有两个实现类:

  • SimpleInstantiationStrategy,使用bean的构造函数来实例化
  • CglibSubclassingInstantiationStrategy,使用CGLIB动态生成子类

二、源码阅读

createBean方法:

2.1 doCreateBean方法追踪


先看SimpleInstantiationStrategy,直接根据无参构造函数创建实例:

再看CglibSubclassingInstantiationStrategy,使用CGLIB动态生成子类:

2.2 为解决循环依赖问题,将实例化后的bean放进缓存中提前暴露

详情请见这篇文章:spring中解决循环依赖的核心代码之一:将实例化后的bean放进缓存中提前暴露

我们只要知道这几点就行:

  • 这里是把bean对象放到三级缓存里;
  • 三级缓存放到是BeanFactory对象;
  • BeanFactory对象,通过实现FactoryBean接口并重写getObject()方法,可以自定义Bean的创建逻辑,FactoryBean本身也由Spring容器管理,但它不支持依赖注入;
  • getEarlyBeanReference类是从二级缓存拿对象;

getEarlyBeanReference代码后面再讲。

2.3 中间这些暂时不讲

2.4 后续



本篇的源码阅读部分内容,现在留个大概的印象,后续会更详细得讲解。

相关推荐
庞轩px7 小时前
第七篇:Spring扩展点——如何优雅地介入Bean的创建流程
java·后端·spring·bean·aware·扩展点
tongluowan0079 小时前
一个请求在Spring MVC 中是怎么流转的
java·spring·mvc
夜郎king9 小时前
Spring AI 对接大模型开发易错点总结与实战解决办法
java·人工智能·spring
oradh10 小时前
Oracle数据库中的Java概述
java·数据库·oracle·sql基础·oracle数据库java概述
组合缺一10 小时前
Java AI 框架三国杀:Solon AI vs Spring AI vs LangChain4j 深度对比
java·人工智能·spring·ai·langchain·llm·solon
c++之路10 小时前
适配器模式(Adapter Pattern)
java·算法·适配器模式
吴声子夜歌10 小时前
Java——接口的细节
java·开发语言·算法
阿拉金alakin10 小时前
深入理解 Java 锁机制:CAS 原理、synchronized 优化与主流锁策略全总结
java·开发语言
myheartgo-on11 小时前
Java—方 法
java·开发语言·算法·青少年编程
雨落在了我的手上11 小时前
如何学习java?
java·开发语言·学习