课程目录
/3-094-Spring源码分析/
(一)mac版idea引入spring源码
(二)spring的学习流程
(三)spring源码分析
【1】refresh()方法概览(AbstractApplicationContext抽象类里的refresh方法)
(1)阅读源码进行debug调试的方法
【2】通过一张思维导图说明refresh每个方法主要完成的事
【3】spring工作流程图
(四)spring源码设计架构,认识spring框架的工作 流程
【1】spring设计思想图
【2】认识一些重要接口
(1)BeanFactory接口
(2)第一阶段:注册BeanDefinition
(3)第二阶段:执行BeanFactoryPostProcessor
(4)第三阶段:注册BeanPostProcessor、监听器等
(5)第四阶段:创建bean(实例化-初始化-放入容器)
(6)第五阶段:管理生命周期、发布刷新事件
(五)spring源码的debug过程
【1】首先是测试方法的入口【ApplicationContext】
【2】读取xml配置文件
【3】构造器中调用【refresh】方法
【4】为创建bean工厂做准备工作【prepareRefresh】
【5】开始创建bean工厂和bean对象加载【obtainFreshBeanFactory】
【6】bean工厂里众多属性值需要赋值【prepareBeanFactory】
【7】通过增强器对bean进行处理【postProcessBeanFactory】
【8】实例化并调用BeanFactoryPostProcessor方法【invokeBeanFactoryPostProcessors】
【9】实例化并注册BeanPostProcessor【registerBeanFactoryProcessors】
【10】做国际化处理【initmessageSource】(过)
【11】初始化应用事件多播器,方便后面的发布监听事件
【12】onFresh方法
【13】创建监听器,方便后面使用【registerListener】
【14】【bean生命周期】开始实例化剩下的非懒加载单例bean对象【finishBeanFactoryInitialization】
(1)把所有的beanName放进List,然后开始遍历完成实例化bean对象
(2)开始实例化bean对象
(3)开始填充属性(用户自定义属性赋值)
(4)开始调用Aware接口(容器对象赋值)
(5)开始初始化前置处理【BeanpostProcessor:before】
(6)开始执行初始化调用init方法
(7)开始初始化后置处理【BeanpostProcessor:after】
(六)bean生命周期概述
(七)循环依赖问题详解
【1】什么是循环依赖?
【2】spring中解决循环依赖的思路
【3】三级缓存介绍
(1)三级缓存的代码
(2)三级缓存的各个功能
(3)spring三大缓存介绍
【4】三级缓存的debug流程详解
(1)源码中留意的6个重要方法
(2)debug流程
(3)三级缓存debug流程的总结
1-第一阶段
2-第二阶段
3-第三阶段
4-第四阶段
5-第五阶段
6-第六阶段
7-过程图
【5】三级缓存的重要问题
(1)为什么第三级缓存要使用ObjectFactory?
(2)什么时候将Bean的引用提前暴露给第三级缓存的ObjectFactory持有?
(3)如果只有一级缓存
(4)如果只有二级缓存
(5)二级缓存已然解决了循环依赖问题,为什么还需要三级缓存?
(6)Spring是如何解决的循环依赖?
【7】spring解决循环依赖的详细流程
(1)前期铺垫工作
(2)什么情况下循环依赖可以被处理?
(3)Spring是如何解决的循环依赖?
(1)简单的循环依赖(没有AOP)
(1)案例demo
(2)Spring在创建Bean的时候默认是按照自然排序来进行创建的,所以第一步Spring会去创建A
(3)循环依赖处理过程的关键方法步骤流程图
【1】调用getSingleton(beanName)
【2】调用getSingleton(beanName, singletonFactory)
【3】调用addSingletonFactory方法
(2)结合了AOP的循环依赖
(3)三级缓存真的提高了效率了吗?
(4)总结
![[衡天云]爆款云服务器 低至12元/月](/hty.png)