spring源码解析

Easter79
• 阅读 665

前言

上篇我们介绍了spring容器加载的方式,并重点介绍了基于xml配置解析和注解扫描两种容器加载的方式,封装和注册beandefinition的过程。今天我们分享BeanDefinition注册后的另一个重要过程 ---bean的实例化过程的源码。

容器加载流程

spring源码解析
在整个bean实例化的过程中,spring主要干了以下几件大事:
1.bean的实例化过程算法;2.IOC依赖注入;3.注解支撑;4.系列BeanPostProcessors的接口执行;5.AOP动态代理构建;
下面我们就追随整个过程的源码,去一探究竟...

AbstractApplicationContext.finishBeanFactoryInitialization()实例化bean入口方法
spring源码解析
DefaultListableBeanFactory.preInstantiateSingletons()开始实例化流程
spring源码解析
AbstractBeanFactory.doGetBean()抽象实例化bean骨架方法
spring源码解析
DefaultSingletonBeanRegistry.getSingleton()获取三个级别缓存的流程
spring源码解析
返回factorybean中定义的对象实例,getObjectForBeanInstance()
spring源码解析
spring源码解析
多例情况(Scope=ProtoType)下,有循环依赖则直接抛出异常
spring源码解析
检测是否抽象beandefinition对象,则直接抛出异常
spring源码解析
缓存依赖的depend的bean对象
spring源码解析
创建并缓存单例bean实例
spring源码解析
spring源码解析
创建bean实例createBean()核心封装
spring源码解析
spring源码解析
反射创建bean实例
spring源码解析
spring源码解析
spring源码解析
spring源码解析
spring源码解析
spring源码解析
bean的依赖对象IOC注入:AbstractAutowireCapableBeanFactory.populateBean()
spring源码解析
bean实例化后置处理,主要是AOP动态代理的创建,这个后面会详细展开分享:initializeBean()
spring源码解析
bean实例销毁注册,供外部servlet容器调用:registerDisposableBeanIfNecessary()
spring源码解析
spring源码解析

调用时序

spring源码解析

总结

OK,bean实例化的整个过程就先分享到这里,后面我们将会分享spring源码是如何解决循环依赖的问题,AOP源码,Spring事务源码等诸多干货,请继续关注!欢迎在下方留言关于这块的问题,大家一起探讨!

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
2年前
spring注解
随着越来越多地使用Springboot敏捷开发,更多地使用注解配置Spring,而不是Spring的applicationContext.xml文件。Configuration注解:Spring解析为配置类,相当于spring配置文件Bean注解:容器注册Bean组件,默认id为方法名@Configurat
Easter79 Easter79
2年前
spring源码
SpringIOC容器源码解析系列,建议大家按顺序阅读,欢迎讨论(_spring源码均为4.1.6.RELEASE版本_)1.Spring源码IOC容器(一)构建简单IOC容器(https://my.oschina.net/u/2377110/blog/902073)2.Spring源码IOC容器(二)Bean的定位解析注
Stella981 Stella981
2年前
Spring Bean注册解析(一)
       Spring是通过IoC容器对Bean进行管理的,而Bean的初始化主要分为两个过程:Bean的注册和Bean实例化。Bean的注册主要是指Spring通过读取配置文件获取各个bean的声明信息,并且对这些信息进行注册的过程。Bean的实例化则指的是Spring通过Bean的注册信息对各个Bean进行实例化的过程。本文主要讲解Spring是如何
Wesley13 Wesley13
2年前
Spring学习详解(1)——Spring入门详解
一:spring的基本用法:1,关于spring容器:spring容器是Spring的核心,该容器负责管理spring中的java组件,ApplicationContextctx newClassPathXmlApplicationContext("bean.xml");//这种方式实例化容器,容器会自动预初始化所有Bean实例
Easter79 Easter79
2年前
Spring对configuration class的加载
前言本文不讲解源码,仅记录加载过程中的一部分。看本文需要先知道spring对BeanDefinition的处理,对bean的实例化。单元测试和配置publicclassConfig{}publicclassContextLoadTest{privateA
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k