Spring源码 之 Bean生命周期——基础篇

目录

 

前言:

Bean生命周期:


一、前言:

IoC 全称为 Inversion of Control,翻译为 “控制反转”,从字面意思来说就是对象的创建及相互依赖关系交由容器进行管理。

SpringIOC作为控制反转思想的优秀实现,在容器启动时读取应用程序提供的Bean配置信息,然后实例化Bean,装配好Bean之间的依赖关系,为上层应用提供准备就绪的运行环境。

本文章从Spring Bean生命周期(并没有包含Bean循环依赖的过程)角度一探Spring Bean的create原理。

二、Bean生命周期:

这里我用的是AnnotationConfigApplicationContext作为Spring容器的启动入口,而非ClassPathXmlApplicationContext或FileSystemXmlApplicationContext,不过本质都是一样,核心方法都是refresh()作为入口

进入到refresh方法里面,这里包含了容器启动的全部大致流程,下图这两个是准备BeanFactory和执BeanFactoryPostProcessor的后置处理器后置方法PostProcessorBeanFactory的调用,如果我们自定义了一个BeanFactoryPostProcessor的实现类,那个执行顺序是先执行BeanFactoryPostProcessor实现类的构造器,然后执行BeanFactoryPostProcessor实现类的后置方法PostProcessorBeanFactory,并且这个后置处理器的执行时机是在最前面的,优于InstatiationAwarePostProcessor、BeanPostProcessor、InitializationBean、@PostConstruc等。

我们自定义的Bean的创建在finishBeanFactoryInitialization(beanFactory)这个方法里面

继续往里走进入preInstantiateSingletons方法的getBean方法里面

然后就是doCreateBean方法,这个方法里面包含了先从缓存中获取Bean、单例Bean的创建、原型Bean的创建流程,我们进入到单例Bean的创建方法里面去

继续往里走,来到createBean的doCreateBean方法

在doCreateBean方法里面,主要完成了①Bean实例的创建、②、处理器修改合并bean定义、③、创建bean 把bean放入到singletonFactories、④、数据填充进实例、⑤、进行bean的初始化,执行后置处理器等,其他的就不再介绍,我们重点看④和⑤、进入到④ 的内部,发现有这么一段逻辑,遍历所有的后置处理器(如果开启AOP,则会执行aop的后置处理器生成代理就是在这里),如果是给属性赋值的后置处理器InstantiationAwareBeanPostProcessor类型,就执行这个后置处理器的后置方法postProcessPropertyValues,进入到这个方法里面则一目了然。

然后接下来进入到initializeBean看初始化bean的逻辑

初始化里面会做比较多的事情,首先会进行一些Aware接口的处理工作,然后是初始化前BeanPostProcessor.postProcessBeforeInitialization和初始化后postProcessAfterInitialization接口的调用,在这两个方法中间执行的是init操作,比如接口InitializingBean的afterPropertiesSet方法的调用和配置的init-method方法的调用

初始化完成,如果我们实现了InitantiationAwarePostProcessor接口,再调用postProcessorAfterInstantiation方法基本上Bean的创建过程就完成了,这就是createBean的大致过程。

 

个人才疏学浅,信手涂鸦,spring框架更多模块解读相关源码持续更新中,感兴趣的朋友请移步至个人公众号,谢谢支持😜😜......

公众号:wenyixicodedog

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值