spring源码解析 - spring容器加载源码(bean实例化过程)
前言
上篇我们介绍了spring容器加载的方式,并重点介绍了基于xml配置解析和注解扫描两种容器加载的方式,封装和注册beandefinition的过程。今天我们分享BeanDefinition注册后的另一个重要过程 ---bean的实例化过程的源码。
容器加载流程
在整个bean实例化的过程中,spring主要干了以下几件大事:
1.bean的实例化过程算法;2.IOC依赖注入;3.注解支撑;4.系列BeanPostProcessors的接口执行;5.AOP动态代理构建;
下面我们就追随整个过程的源码,去一探究竟...
AbstractApplicationContext.finishBeanFactoryInitialization()实例化bean入口方法
DefaultListableBeanFactory.preInstantiateSingletons()开始实例化流程
AbstractBeanFactory.doGetBean()抽象实例化bean骨架方法
DefaultSingletonBeanRegistry.getSingleton()获取三个级别缓存的流程
返回factorybean中定义的对象实例,getObjectForBeanInstance()
多例情况(Scope=ProtoType)下,有循环依赖则直接抛出异常
检测是否抽象beandefinition对象,则直接抛出异常
缓存依赖的depend的bean对象
创建并缓存单例bean实例
创建bean实例createBean()核心封装
反射创建bean实例
bean的依赖对象IOC注入:AbstractAutowireCapableBeanFactory.populateBean()
bean实例化后置处理,主要是AOP动态代理的创建,这个后面会详细展开分享:initializeBean()
bean实例销毁注册,供外部servlet容器调用:registerDisposableBeanIfNecessary()
调用时序
总结
OK,bean实例化的整个过程就先分享到这里,后面我们将会分享spring源码是如何解决循环依赖的问题,AOP源码,Spring事务源码等诸多干货,请继续关注!欢迎在下方留言关于这块的问题,大家一起探讨!
- Spring源码解析:简单容器中Bean的加载过程初探
- spring容器初始化,bean加载生成过程,源码解析学习
- Spring原理解析-BeanFactory---容器加载过程解析
- 分析spring源码第五(三)篇:Spring中Bean的解析、加载、创建 过程总结
- Spring源码解析 – AnnotationConfigApplicationContext容器创建过程
- Spring系列(一):Spring MVC bean 解析、注册、实例化流程源码剖析
- 【Spring源码解析】—— 结合SpringMVC过程理解IOC容器初始化
- 【Spring源码解析】—— 结合SpringMVC过程理解IOC容器初始化之注解部分探究
- Spring解析,加载及实例化Bean的顺序(零配置)
- Spring源码阅读——Bean的加载和获取过程
- 从源码看spring applicationContext在web容器中加载过程
- spring容器bean实例化之后添加一些自己的逻辑处理(应用实例启动tomcat加载缓存)
- Spring Bean加载源码解析
- tomcat加载spring过程以及实例化bean
- Spring容器加载bean的过程
- 看看Spring的源码——Bean加载过程
- Spring IOC 容器源码分析 - 创建单例 bean 的过程
- 详解Spring简单容器中的Bean基本加载过程
- Spring IOC源码解析--invokeBeanFactoryPostProcessors控制后置处理器的bean加载顺序
- 【Spring源码分析】非懒加载的单例Bean初始化过程(下篇)