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



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

相关推荐
白宇横流学长12 小时前
基于Java的火车票订票系统的设计与开发
java·开发语言
黎雁·泠崖12 小时前
Java核心基础API学习总结:从Object到包装类的核心知识体系
java·开发语言·学习
Yvonne爱编码12 小时前
JAVA数据结构 DAY1-集合和时空复杂度
java·数据结构·python
win x13 小时前
JavaSE(基础)高频面试点及 知识点
java·面试·职场和发展
Terio_my13 小时前
简要 Java 面试题学习
java·开发语言·学习
好好研究13 小时前
Spring Boot - Thymeleaf模板引擎
java·spring boot·后端·thymeleaf
爬山算法13 小时前
Hibernate(76)如何在混合持久化环境中使用Hibernate?
java·后端·hibernate
编程彩机13 小时前
互联网大厂Java面试:从分布式缓存到消息队列的技术场景解析
java·redis·面试·kafka·消息队列·微服务架构·分布式缓存
她说..13 小时前
策略模式+工厂模式实现单接口适配多审核节点
java·spring boot·后端·spring·简单工厂模式·策略模式
坚持就完事了13 小时前
Java的OOP
java·开发语言