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



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

相关推荐
小羊没烦恼!2 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里2 天前
java中的继承和多态的区别
java
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕2 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码2 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖2 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时2 天前
01-06-A-JVM排查实战详解
java·jvm
vipxieliang2 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
ba_pi2 天前
mysql 查询所有表名并授权
java
ProcessOn官方账号2 天前
java函数式编程--入门基础
java·编程·函数式编程