当前位置:首页 > 经验 >

bean的生命周期图解(bean生命周期五个阶段)

来源:原点资讯(www.yd166.com)时间:2022-11-01 13:58:45作者:YD166手机阅读>>

专注于Java领域优质技术,欢迎关注

整理:搜云库技术团队

在网上已经有跟多Bean的生命周期的博客,但是很多都是基于比较老的版本了,最近把整个流程化成了一个流程图。待会儿使用流程图,说明以及代码的形式来说明整个声明周期的流程。注意因为代码比较多,这里的流程图只画出了大概的流程,具体的可以深入代码。

一、获取Bean

bean的生命周期图解,bean生命周期五个阶段(1)

第一阶段获取Bean

这里的流程图的入口在 AbstractBeanFactory类的 doGetBean方法,这里可以配合前面的 getBean方法分析文章进行阅读。主要流程就是

1、先处理Bean 的名称,因为如果以“&”开头的Bean名称表示获取的是对应的FactoryBean对象;

2、从缓存中获取单例Bean,有则进一步判断这个Bean是不是在创建中,如果是的就等待创建完毕,否则直接返回这个Bean对象

3、如果不存在单例Bean缓存,则先进行循环依赖的解析

4、解析完毕之后先获取父类BeanFactory,获取到了则调用父类的getBean方法,不存在则先合并然后创建Bean

二、创建Bean

2.1 创建Bean之前

bean的生命周期图解,bean生命周期五个阶段(2)

在真正创建Bean之前逻辑

这个流程图对应的代码在 AbstractAutowireCapableBeanFactory类的 createBean方法中。

1、这里会先获取 RootBeanDefinition对象中的Class对象并确保已经关联了要创建的Bean的Class 。2、这里会检查3个条件

(1)Bean的属性中的 beforeInstantiationResolved字段是否为true,默认是false。

(2)Bean是原生的Bean

(3)Bean的 hasInstantiationAwareBeanPostProcessors属性为true,这个属性在Spring准备刷新容器钱转杯BeanPostProcessors的时候会设置,如果当前Bean实现了 InstantiationAwareBeanPostProcessor则这个就会是true。

当三个条件都存在的时候,就会调用实现的 InstantiationAwareBeanPostProcessor接口的 postProcessBeforeInstantiation方法,然后获取返回的Bean,如果返回的Bean不是null还会调用实现的 BeanPostProcessor接口的 postProcessAfterInitialization方法,这里用代码说明


bean的生命周期图解,bean生命周期五个阶段(3)


3、如果上面3个条件其中一个不满足就不会调用实现的方法。默认这里都不会调用的这些 BeanPostProcessors的实现方法。然后继续执行后面的 doCreateBean方法。

2.1 真正的创建Bean,doCreateBean

bean的生命周期图解,bean生命周期五个阶段(4)

栏目热文

十个springboot面试题(springboot的常见15道面试题)

十个springboot面试题(springboot的常见15道面试题)

做 Java 开发,没有人敢小觑 Spring Boot 的重要性,现在出去面试,无论多小的公司 or 项目,都要跟你扯...

2022-11-01 13:58:28查看全文 >>

bean的生命周期面试题(bean生命周期五个阶段)

bean的生命周期面试题(bean生命周期五个阶段)

Spring作为当前Java最流行、最强大的轻量级框架。Spring Bean的生命周期也是面试高频题,了解Spring...

2022-11-01 14:20:55查看全文 >>

bean生命周期的四个阶段(bean的生命周期可以引用的接口)

bean生命周期的四个阶段(bean的生命周期可以引用的接口)

Bean的生命周期可以简单分为11个周期:1.构造方法。不管是反射获取和静态工厂获取都会调用Bean嵌套类的构造方法。2...

2022-11-01 14:03:51查看全文 >>

bean的生命周期讲解(bean的生命周期可以引用的接口)

bean的生命周期讲解(bean的生命周期可以引用的接口)

前言在 Spring 中,那些组成应用程序的主体及由 Spring IOC 容器所管理的对象,被称之为 bean。简单地...

2022-11-01 13:56:24查看全文 >>

beanfactory和factorybean的区别(beanfactory和factorybean区别)

beanfactory和factorybean的区别(beanfactory和factorybean区别)

前言理解factoryBean是非常非常有必要的,因为在Spring中FactoryBean最为典型的一个应用就是用来创...

2022-11-01 14:06:17查看全文 >>

bean的三个生命周期简述(bean的生命周期可以引用的接口)

bean的三个生命周期简述(bean的生命周期可以引用的接口)

spring作为当前java最流行、最强大的轻量级框架,受到了程序员的热烈欢迎。准确的了解Spring bean的生命周...

2022-11-01 13:53:07查看全文 >>

spring注入bean的方法(spring注入有状态的bean)

spring注入bean的方法(spring注入有状态的bean)

来源:blog.csdn.net/weixin_43741092/article/details/120176466将b...

2022-11-01 14:05:30查看全文 >>

springbean生命周期(spring三大核心原理)

springbean生命周期(spring三大核心原理)

1.Bean生命周期简单概述 2.BeanPostProcessor作用 3.BeanPostProcessor实现增强...

2022-11-01 13:49:32查看全文 >>

springboot三大核心原理(spring boot核心技术笔记)

springboot三大核心原理(spring boot核心技术笔记)

Spring Boot核心原理通过上篇的学习,读者应该对Spring Boot有了一个大致的认识,利用Spring Bo...

2022-11-01 13:55:26查看全文 >>

类加载的5个过程详解(类加载器和双亲委派机制)

类加载的5个过程详解(类加载器和双亲委派机制)

# 类加载过程加载, 验证, 准备, 解析, 初始化下面依次说说...

2022-11-01 14:04:06查看全文 >>

文档排行