Spring Bean的生命周期介绍

news/2024/7/16 6:26:32

Spring Bean的生命周期

    • 源码链路
    • 思维导图
    • 流程图介绍
    • SpringBean对象的生命周期
    • 视频介绍

源码链路

refresh()
finishBeanFactoryInitialization(beanFactory);
beanFactory.preInstantiateSingletons();
getBean(beanName);
doGetBean(name, null, null, false);
createBean(beanName, mbd, args);
doCreateBean(beanName, mbdToUse, args);

在这里插入图片描述

在这里插入图片描述

思维导图

在这里插入图片描述

流程图介绍

在这里插入图片描述

SpringBean对象的生命周期

(1)实例化Bean:

对于BeanFactory容器,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用createBean进行实例化。对于ApplicationContext容器,当容器启动结束后,通过获取BeanDefinition对象中的信息,实例化所有的bean。

(2)设置对象属性(依赖注入):

实例化后的对象被封装在BeanWrapper对象中,紧接着,Spring根据BeanDefinition中的信息 以及 通过BeanWrapper提供的设置属性的接口完成依赖注入。

(3)处理Aware接口:

接着,Spring会检测该对象是否实现了xxxAware接口,并将相关的xxxAware实例注入给Bean:
①如果这个Bean已经实现了BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法,此处传递的就是Spring配置文件中Bean的id值;
②如果这个Bean已经实现了BeanFactoryAware接口,会调用它实现的setBeanFactory()方法,传递的是Spring工厂自身。
③如果这个Bean已经实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文;

(4)BeanPostProcessor:

如果想对Bean进行一些自定义的处理,那么可以让Bean实现了BeanPostProcessor接口,那将会调用postProcessBeforeInitialization(Object obj, String s)方法。

(5)InitializingBean 与 init-method:

如果Bean在Spring配置文件中配置了 init-method 属性,则会自动调用其配置的初始化方法。

(6)如果这个Bean实现了BeanPostProcessor接口,将会调用postProcessAfterInitialization(Object obj, String s)方法;由于这个方法是在Bean初始化结束时调用的,所以可以被应用于内存或缓存技术;

以上几个步骤完成后,Bean就已经被正确创建了,之后就可以使用这个Bean了。

(7)DisposableBean:

当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用其实现的destroy()方法;

(8)destroy-method:

最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。

视频介绍

史上最完整的Spring Bean的生命周期
spring-Bean的生命周期学习梳理


http://www.niftyadmin.cn/n/200376.html

相关文章

class与namespace的区别

class也是一个名字空间,不过他是封闭的,也就是说你只能在一个文件里面定义class包含什么(通俗点讲,就是一个class只能有一个头文件); namespace是开放的,和class不同的是你可以在多个文件里面象…

C程序设计语言基础

机器语言与高级语言 计算机硬件只能够识别电平信号,正电平或负电平,计算机的的各种按钮触发各种电平与计算机交互。随着随着操作系统的发展,人们用1,0分别表示正电平和负电平,并由0,1所组成的一系列指令指…

玩具产品发美国FBA头程走什么渠道比较划算

如果要将玩具产品发往美国FBA仓库,选择哪个渠道比较经济实惠呢?考虑到玩具产品在出口到美国中占据了较大的比例,有一点需要注意,在出口玩具产品前一定要做好CPC认证,只有通过CPC认证的产品才能发往美国FBA头程。那么,…

力扣每日一题【2399.检查相同字母间的距离】

力扣每日一题【2399.检查相同字母间的距离】 文章目录力扣每日一题【2399.检查相同字母间的距离】🍊题目🍋解析🥦代码🍊题目 给你一个下标从 0 开始的字符串 s ,该字符串仅由小写英文字母组成,s 中的每个字…

护眼灯哪些牌子好?2023热门护眼灯品牌推荐

护眼灯可以说是书桌的标配,不管是办公桌、书桌上,基本上有一盏辅助台灯,主要是就是补足室内环境亮度,市面上可以选择的护眼灯,可谓是琳琅满目,让人挑花眼,如果选择品质不好的台灯可能对眼睛造成…

Hilt进阶--本文带你吃透Hilt自定义与跨壁垒

跨越 IOC容器的壁垒 使用依赖注入(DI)时,我们需要它对 实例 、依赖关系 、 生命周期 进行管理,因此DI框架会构建一个容器,用于实现这些功能。这个容器我们惯称为IOC容器。 在容器中,会按照我们制定的规则…

ASP一个小型搜索引擎的设计与实现

本文通过分析国内外搜索引擎的发展现状,提出了一种功能强大,操作简单,通用性强,可以满足用户对信息搜索需要,利用ASP技术实现的一个B/S体系结构的搜索引擎系统方案。文中着重论述了该系统的功能与实现、数据流程与存储、后台管理等…

PIP 绑定国内源

今天给新PC部署环境,pip install 太慢了,又忘记具体怎么配了,就查了下,结果看很多blog都是去手动新建pip.ini,太麻烦了。找到了之前的配置方法。记录下 直接cmd里面执行就可以了 pip config set global.index-url ht…