基础篇: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 后续



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

相关推荐
写代码写到手抽筋7 小时前
5G上行DCI字段判定:端口 流数 PMI选择详解
java·算法·5g
wang09077 小时前
自己动手写一个spring之系列
spring
xieliyu.7 小时前
Java算法精讲:双指针(二)
java·开发语言·算法
jeffer_liu8 小时前
Spring AI 生产级实战:裁判员
java·人工智能·后端·spring·大模型
小bo波9 小时前
枚举实战
java·设计模式·枚举·后端开发·代码重构
夜微凉49 小时前
三、Spring
java·后端·spring
橘右今9 小时前
2026 Java后端高频面试宝典
java·开发语言·面试
xyzzklk10 小时前
解决Salesforce无法向外发送邮件
android·java·开发语言·网络·crm·salesforce·客户关系管理
biubiubiu070610 小时前
SpringBoot关于外部化配置
java·spring boot·spring