Spring Bean的生命周期

Spring Bean生命周期源码详解 之后child需要根据BeanDefinition来生成Bean对象之前,需要进行BeanDefinition的合并,得到完整的child的BeanDefinition,也就是RootBeanDefinition。我们知道BeanPostProcessor接口的作用是在bean初始化前和初始化后执行一些方法,Spring提供了该接口的子接口来进行实例化前后执行的一些方法。可以在这个步骤中,对Bean最终进行处理,Spring中的AOP就是基于初始化后实现的,初始化后返回的对象才是最终的Bean对象。 阅读详情

Spring Bean 的完整生命周期主要包括以下阶段:

  1. 实例化(Instantiation):Spring 容器通过调用 Bean 的构造函数来创建 Bean 的实例。这是 Bean 生命周期的第一步。

  2. 设置属性值(Setting Bean Properties):Spring 容器通过调用 Bean 的 setter 方法来设置 Bean 的属性值,包括依赖注入(Dependency Injection)。

  3. 处理 BeanNameAware 接口(BeanNameAware):如果 Bean 实现了 BeanNameAware 接口,Spring 容器会调用其 setBeanName() 方法,传递 Bean 的名称给它。

  4. 处理 BeanFactoryAware 接口(BeanFactoryAware):如果 Bean 实现了 BeanFactoryAware 接口,Spring 容器会调用其 setBeanFactory() 方法,传递 BeanFactory 给它。

  5. 处理 ApplicationContextAware 接口(ApplicationContextAware):如果 Bean 实现了 ApplicationContextAware 接口,Spring 容器会调用其 setApplicationContext() 方法,传递 ApplicationContext 给它。

  6. BeanPostProcessor 的前置处理(BeanPostProcessor.preProcessBeforeInitialization):如果有注册的 BeanPostProcessor,Spring 容器会在 Bean 的初始化之前调用它们的 postProcessBeforeInitialization() 方法,可以在这一步对 Bean 进行额外的处理。

  7. 初始化(Initialization):Spring 容器会调用 Bean 的初始化方法,可以通过在 Bean 上标注 @PostConstruct 注解或实现 InitializingBean 接口的 afterPropertiesSet() 方法来指定初始化逻辑。

  8. BeanPostProcessor 的后置处理(BeanPostProcessor.postProcessAfterInitialization):如果有注册的 BeanPostProcessor,Spring 容器会在 Bean 的初始化之后调用它们的 postProcessAfterInitialization() 方法,可以在这一步对 Bean 进行额外的处理。

  9. 使用(Bean in Use):Bean 已经完成初始化,可以在应用程序中使用了。

  10. 销毁(Destruction):当应用程序关闭或手动销毁 Bean 时,Spring 容器会调用 Bean 的销毁方法,可以通过在 Bean 上标注 @PreDestroy 注解或实现 DisposableBean 接口的 destroy() 方法来指定销毁逻辑。

简化阶段

 

【其他说明】

BeanNameAware、BeanFactoryAware、ApplicationContextAware类似处理。

在 Spring 中,Bean 实现了 BeanNameAware 接口的方式有两种:

1.实现 BeanNameAware 接口:Bean 可以实现 BeanNameAware 接口,并实现接口中的 setBeanName() 方法,用于接收 Spring 容器传递的 Bean 的名称。例如:

public class MyBean implements BeanNameAware {
    private String beanName;

    @Override
    public void setBeanName(String name) {
        this.beanName = name;
    }

    //...其他属性和方法
}

2.在配置文件中使用 name 属性:在 XML 或者 JavaConfig 配置文件中,可以通过设置 name 属性来显式地为 Bean 指定名称,从而实现 BeanNameAware 接口的效果。例如:

在 XML 配置中:

<bean id="myBean" class="com.example.MyBean" name="customBeanName">
    <!-- 配置其他属性 -->
</bean>

在 JavaConfig 配置(通俗叫代码注解配置)中:

@Configuration
public class MyConfig {
    @Bean(name = "customBeanName")
    public MyBean myBean() {
        // 创建 MyBean 实例并配置其他属性
        return new MyBean();
    }
}

当 Spring 容器创建 MyBean 实例时,会调用 MyBean 实现的 setBeanName() 方法或者使用配置文件中指定的 Bean 名称来传递 Bean 的名称,从而使得 MyBean 实现了 BeanNameAware 接口。在接下来的 Bean 生命周期中,MyBean 可以通过获取 beanName 属性来获取自己在容器中的名称。

ApplicationContextAware 和 BeanFactoryAware 是 Spring 框架中两个不同的接口,它们都用于在 Spring Bean 中获取容器的引用,但有一些区别:

  1. 功能:ApplicationContextAware 接口用于获取完整的 ApplicationContext 实例,包括其父 ApplicationContext,可以用于进行更加灵活和强大的操作,如获取环境信息、获取配置信息等。而 BeanFactoryAware 接口只能获取当前 Bean 所属的 BeanFactory 实例,相对来说功能较为简单,只能进行基本的 Bean 获取操作。

  2. 引用类型:ApplicationContextAware 接口的引用类型是 ApplicationContext,而 BeanFactoryAware 接口的引用类型是 BeanFactory。ApplicationContext 是 BeanFactory 的子接口,它包含了 BeanFactory 的所有功能,并且还提供了更多的功能,如国际化、事件发布、AOP 等。

  3. 使用时机:ApplicationContextAware 接口适用于需要在 Bean 中获取完整的 ApplicationContext 实例的场景,比如需要访问 ApplicationContext 的环境属性、配置信息等高级功能。而 BeanFactoryAware 接口适用于需要在 Bean 中获取当前 Bean 所属的 BeanFactory 实例的场景,比如需要获取其他 Bean 实例的引用等。

  4. 推荐使用:在现代的 Spring 应用中,推荐使用 ApplicationContextAware 接口,因为它提供了更加灵活和强大的功能,包括获取完整的 ApplicationContext 实例和支持更多的高级特性。而 BeanFactoryAware 接口则相对较为简单,适用于一些简单的场景。同时,也可以使用更加细粒度的方式,如使用 @Autowired 注解来注入需要的 Bean 实例,而不是直接使用 ApplicationContextAware 或 BeanFactoryAware 接口。

4、I3C协议详解 I3C最初的设计目的是为移动设备创建一个能够使用多个传感器的单一接口。随着现代化移动设备对于传感器数量的增加以及对性能的提高,I2C和SPI已经达到了他们所能支持的临界点,而I3C的出现就是为了解决这一问题,I3C可以在同一根主线上支持更多的传感器设备,而且不会因为要支持中断或睡眠模式而增加额外的逻辑信号。I3C可以在更低功耗的情况下提供更快的传输速率,该特性的提升不止是对移动设备,对其他的嵌入式设备也都是很大的帮助。例如穿戴设备,需要在有限的物理空间中使用多个传感器并且要求更小的耗电。 一、简述.. 阅读详情

相关推荐

从零开始:如何用Kimi OK Computer快速生成专业级数据分析报告和PPT(附实战案例)

本文详细介绍了如何利用Kimi OK Computer智能体模式,从零开始快速生成专业级数据分析报告和演示文稿。通过实战案例,解析了其任务规划、联网搜索、多工具协同和内容排版等核心能力,并提供了精准指令构造、工作流引导及成果精修的完整步骤,帮助用户高效完成从数据到成品的端到端交付。

weixin_29284201的博客 371

Spring IOC容器与 Bean 管理 第4关:根据 Bean 的生命周期修改属性值

Spring IOC容器与 Bean 管理 第4关:根据 Bean 的生命周期修改属性值

于建章的博客 2822

人工智能-CS188 Project 2: Multi-agents

一、项目介绍 项目介绍网页 项目代码下载 本项目是采用Berkeley的CS188课程内容实习二的内容,在这个项目中,我们将为经典版本的Pacman 设计自动算法,包括幽灵。在此过程中,我们将实现 minimax 和 expectimax 搜索并尝试评估函数设计 完成作业只需要完成5个题目,按照项目介绍的步骤进行完成,主要是在multiAgents.py文件中进行补充代码 二、代码详情 1、Question1:Reflex Agent 略 2、Question2:Minimax 套用ppt上的minm

xiten的博客 8285

spring4.x(五)之第四章--Bean 的生命周期

1. BeanFactory 中 Bean 的生命周期 1. 对于 bean 的生命周期的分类 步骤详解: 注意: 2. Bean 生命周期实例 package com.smart; import org.springframework.beans.BeansException; import org.springframework...

yin__ren的博客 520

【新华三】DHCP+TFTP+ZTP自动开局实战

设备运行ZTP功能,可以自动获取并自动加载开局文件,实现设备的免现场配置和部署,从而降低人力成本,提升部署效率。使用TFTP服务器工具进行文件的上传和下载,网上很多TFTP server软件,大家可以自行下载。3CDaemon等,可以根据使用自取所需。大家应该都了解ZTP,但是目前发现除了控制器之外仅使用ZTP开局的兄弟并不是很多,因此分享此过程方便大家批量开局,留出更多时间学习更多技术。电脑打开DHCP服务器,TFTP服务器,并通过网线连接到设备的管理口,若设备较多可以通过带外交换机等进行连接,

五大连池的镜子 4981

[FreeRTOS+STM32CubeMX] 03 USART串口调试-基于中断实现接收和发送数据

我们接着上一小节,上一节讲到,接收上位机传来的数据时,需要事先知道传来的数据的字节数,这一操作实在有些反人类,那么如何解决这个问题,上位机输入多少,我们就接收多少数据呢? 接下来我将把USART引入中断,在接收数据的回调函数中引入二值信号量、消息队列,来让我的接收数据能够存储在队列中,并一个一个的在任务中输出出来,并最终在上位机回显。

RichieHuang的博客 2649

Spring容器中Bean的生命周期

一、Spring装配Bean的过程 实例化; 设置属性值; 如果实现了BeanNameAware接口,调用setBeanName设置Bean的ID或者Name; 如果实现BeanFactoryAware接口,调用setBeanFactory 设置BeanFactory; 如果实现ApplicationContextAware,调用setApplicationContext设置Applicat

716

别再问ARM麒麟怎么装微信了!手把手教你用铠大师搞定Windows软件(飞腾/海思芯片实测)

本文详细介绍了如何在ARM架构的信创电脑(如飞腾/海思芯片)上使用铠大师安装和运行Windows软件,解决微信、Office等常用软件的兼容性问题。通过实测数据对比,铠大师在性能和易用性上显著优于传统方案,为麒麟系统用户提供了一套完整的解决方案。

weixin_28736355的博客 894

Spring系列(二)——Bean的生命周期及属性赋值

一、@Bean注解指定初始化和销毁的方法 1、源码 @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) //方法与注解上使用 @Retention(RetentionPolicy.RUNTIME) @Documented...

chouniti9651的博客 854

Pytorch版deeplabv3+环境配置训练自己的数据集

参考:https://blog.youkuaiyun.com/qq_36766560/article/details/110009622?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161594607816780266214828%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161594607816780266214828

Ring__Rain的博客 1万+

手把手教你学PCIE--系统内存管理:GART(Graphics Address Remapping Table)的典型用途详解

GART(图形地址重映射表)是GPU的核心组件,主要用于地址映射转换。其典型用途分为物理模式和虚拟模式两类:在物理模式下,GART将GPU虚拟地址映射到分散的物理内存,支持DMA连续访问非连续内存块,适用于GPU渲染纹理采样和AI推理数据搬运等场景;在虚拟模式下,GART配合IOMMU实现多级映射,将GPU虚拟地址转换为虚拟机物理地址再映射到宿主机物理地址,确保多租户隔离,应用于云服务器GPU共享和容器化AI训练等虚拟化环境。两种模式分别优化了高性能计算场景和虚拟化场景的需求。

MHD0815的博客 367

Spring 的 Bean 管理 第2关:bean 的生命周期

bean 的生命周期

于建章的博客 1869

72、海洋地理信息系统:电子海图的全面解析

本文全面解析了海洋地理信息系统中的电子海图技术,从AIS数据的应用、电子海图数据的存储与显示,到电子导航的发展趋势和S-100通用水文数据模型的推广,系统地阐述了电子海图在现代航海中的核心作用及其未来发展方向。

hhh00的博客 252

【Spring】Spring的Bean的生命周期

在Java中,Bean是一个重要的概念,它代表了应用程序中的一个对象。在开发中,我们经常使用Bean来管理对象的生命周期。本文将介绍Bean的生命周期,并详细讲解如何在Spring框架中管理Bean的生命周期。Spring其实就是一个管理Bean对象的工厂。它负责对象的创建,对象的销毁等。所谓的生命周期就是:对象从创建开始到最终销毁的整个过程。Spring为每个Bean定义了若干个回调方法,使得开发人员可以在某个特定的时间点对Bean进行特定的操作。

qq_46096136的博客 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Spring 中Bean 的生命周期

Spring 中Bean 的生命周期 文章目录Spring 中Bean 的生命周期前言一、Bean 的完整生命周期二、Bean 的生命周期验证 前言 ​ 这其实是一道面试题,是我在面试百度的时候被问到的,当时没有答出来(因为自己真的很菜),后来在网上寻找答案,看到也是一头雾水,直到看到了《Spring in action》这本书,书上有对Bean声明周期的大致解释,但是没有代码分析,所以就自己上...

程序员cxuan的个人主页 7680

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Spring bean生命周期详解

Spring Bean的完整生命周期从创建Spring容器开始,直到最终Spring容器销毁Bean,这其中包含了一系列关键点。 Spring bean生命周期 四个阶段 Bean的实例化阶段 Bean的设置属性阶段 Bean的 初始化阶段 Bean的销毁阶段 Spring bean生命周期13个环节 阶段1:Bean元信息配置阶段 阶段2:Bean元信息解析阶段 阶段3:将Bean注册到容器中 阶段4:BeanDefinition合并阶段 阶段5:Bean Class加载阶段 阶段6:Bean实例化阶

weixin_44145478的博客 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Spring中bean的生命周期

Spring中的bean的生命周期主要包含四个阶段:实例化Bean --> Bean属性填充 --> 初始化Bean -->销毁Bean 首先是实例化Bean,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚末初始化的依赖时,容器就会调用doCreateBean()方法进行实例化,实际上就是通过反射的方式创建出一个bean对象 Bean实例创建出来后,接着就是给这个Bean对象进行属性填充,也就是注入这个Bean依赖的其它bean对象 属性填充完成后,进行...

kykangyuky的博客 3万+

Spring Bean 的生命周期

目录 一、BeanFactory实例化Bean相关接口 二、BeanFactory的bean生命周期相关代码 三、关于BeanFactory的Bean生命周期接口的总结 四、ApplicationContext的Bean生命周期 五、ApplicationContext的Bean生命周期代码演示 六、总结 Spring的生命周期是指实例化Bean时所经历的一系列阶段,即通过getBe...

实践是最好的方法 3万+

Spring——Bean 的生命周期

目录一、Bean 的生命周期二、代码演示三、主要步骤简述 一、Bean 的生命周期   对于普通的 Java 对象,new 的时候会去创建对象,而当它没有任何引用的时候则被垃圾回收机制回收。相较于前者,由Spring IoC 容器托管的对象,它们的生命周期完全由容器控制。Spring 中每个 Bean 的生命周期如下: 对于 ApplicationContext 容器,当容器启动结束后,实例化所有的 Bean。 设置对象属性,即依赖注入,动态将依赖关系注入到对象中。 紧接着,Spring 会检测该对象

浪漫不死的博客 1万+

spring中bean的生命周期

1、spring中bean的生命周期 (1)概念 在spring框架中,所有的bean对象都有生命周期,就是指bean的创建、初始化、服务、销毁的一个过程。 (2)bean的生命周期 bean的定义 在spring中通常是通过配置文档的方式来定义Bean的,在一个配置文件中可以定义多个Bean bean的初始化 默认在IOC容器加载的时候实例化对象(ApplicationContext是,Beanfactory只有在调用getBean的时候才进行实例化):生命周期(初始化、销毁方法、BeanPos

to_real的博客 4052

Spring中Bean的生命周期

Bean生命周期: Bean的创建-----初始化-----销毁的过程 1、@Bean注解指定初始化和销毁方法 @Bean(initMethod="initMethod" ,destoryMethod="destoryMethod") @Scope("singleton") @Bean(name = "person", initMethod = "initM" , destroyMeth...

zhoushimiao1990的博客 5831

Spring Bean生命周期详解

文章目录Spring bean生命周期13个环节阶段1:Bean元信息配置阶段阶段2:Bean元信息解析阶段阶段3:Spring Bean注册阶段 Spring bean生命周期13个环节 阶段1:Bean元信息配置阶段 阶段2:Bean元信息解析阶段 阶段3:将Bean注册到容器中 阶段4:BeanDefinition合并阶段 阶段5:Bean Class加载阶段 阶段6:Bean实例化阶段(...

永无止境 6607

Spring Bean生命周期总结

1、简要说明 1)本文基于spring5.1.7版本,采用ApplicationContext获取bean对象。 2)BeanFactory和ApplicationContext对于bean后置处理器还有所不同,需要注意,ApplicationContext会自动检测在配置文件中实现了BeanPostProcessor接口的所有bean,并把它们注册为后置处理器,然后在容器创建bean的适当时候调......

欢迎来到【战羽】的博客 4770

Spring 中Bean的生命周期

Spring 中Bean的生命周期 是怎样的,五大阶段都做了什么。

trigger的博客 4580
上一篇: Hive常用命令
下一篇: SpringBoot启动流程
与智能体同行
博客等级 码龄20年 76粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

与智能体同行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值