Spring中Bean的生命周期(五步)(七步)(十步)

简化大白话,spring生命周期五步骤,七步骤,十步骤详细讲解!! 以上配置是在Spring配置文件中声明了一个Bean,并指定了该Bean的类为com.powernode.spring6.bean.LogBeanPostProcessor。● 第三:初始化Bean会调用Bean的init方法,销毁Bean会调用Bean的destroy方法。添加的这三个点位的特点:都是在检查你这个Bean是否实现了某些特定的接口,如果实现了这些接口,则Spring容器会调用这个接口中的方法。检查Bean是否实现了Aware相关的接口,如果实现了接口则调用这些接口中的方法。 阅读详情

五步:

/**
 * Bean的生命周期,按照粗略的五步法
 * 第一步:实例化Bean(调用无参数构造方法。)
 * 第二步:给Bean属性赋值(调用set方法。)
 * 第三步: 初始化Bean(会调用Bean的init方法。注意:这个init方法需要自己写自己配)
 * 第四步:使用Bean
 * 第五步:销毁Bean(会调用Bean的destroy方法。注意:这个destroy方法需要自己写自己配)
 */
public class User {
    private String name;

    public User(){
        System.out.println("第一步:无参数构造方法执行。");
    }

    public void setName(String name) {
        System.out.println("第二步:给对象的属性赋值。");
        this.name = name;
    }

    //这个方法需要自己写,自己配,方法名随意
    public void initBean(){
        System.out.println("第三步:初始化Bean");
    }

    //这个方法需要自己写,自己配,方法名随意
    public void destroyBean(){
        System.out.println("第五步:销毁Bean");
    }
}
<!--需要手动指定初始化方法,和销毁方法。-->
    <bean id="user" class="com.powernode.spring6.bean.User"
          init-method="initBean" destroy-method="destroyBean">
        <property name="name" value="张三"/>
    </bean>
public class BeanLifecycleTest {
    @Test
    public void testBeanLifecycleFive(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
        User user = applicationContext.getBean("user", User.class);
        System.out.println("第四步:使用Bean:"+user);

        //必须手动关闭spring容器,这样spring容器才会销毁Bean。
        ClassPathXmlApplicationContext context = (ClassPathXmlApplicationContext) applicationContext;
        context.close();
    }
}

七步:

在五步的基础上:

/*
Bean的生命周期七步:比五步添加的那两步在哪里? 在初始化Bean的前和后。    
    第一步:实例化Bean
    第二部:Bean属性赋值
    第三步:执行“Bean后处理器”的before方法
    第四步:初始化Bean
    第五步:执行“Bean后处理器”的after方法
    第六步:使用Bean
    第七步:销毁Bean
*/

public class LogBeanPostProcessor implements BeanPostProcessor {

    //以下两个方法中有两个参数,
    //第一个参数:刚创建的bean对象;
    //第二个参数:bean的名字
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("执行Bean后处理器的before方法。");
        return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName);
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.println("执行Bean后处理器的after方法");
        return BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName);
    }
}
    <!--配置Bean后处理器-->
    <!--注意:这个Bean后处理器将作用于整个配置文件中的所有bean。-->
    <bean class="com.powernode.spring6.bean.LogBeanPostProcessor"/>

    <!--需要手动指定初始化方法,和销毁方法。-->
    <bean id="user" class="com.powernode.spring6.bean.User"
          init-method="initBean" destroy-method="destroyBean">
        <property name="name" value="张三"/>
    </bean>

十步:

public class User implements BeanNameAware, BeanClassLoaderAware, BeanFactoryAware, InitializingBean, DisposableBean {
    private String name;

    public User(){
        System.out.println("第一步:无参数构造方法执行。");
    }

    public void setName(String name) {
        System.out.println("第二步:给对象的属性赋值。");
        this.name = name;
    }

    //这个方法需要自己写,自己配,方法名随意
    public void initBean(){
        System.out.println("第三步:初始化Bean");
    }

    //这个方法需要自己写,自己配,方法名随意
    public void destroyBean(){
        System.out.println("第五步:销毁Bean");
    }

    @Override
    public void setBeanClassLoader(ClassLoader classLoader) {
        System.out.println("Bean这个类的加载器:"+classLoader);
    }

    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        System.out.println("生产这个Bean的工厂对象是:"+beanFactory);
    }

    @Override
    public void setBeanName(String s) {
        System.out.println("这个Bean的名字是:"+name);
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("InitializingBean 中的 afterPropertiesSet方法执行。");
    }

    @Override
    public void destroy() throws Exception {
        System.out.println("DisposableBean 中的 destroy方法执行。");
    }
}
Bean的生命周期五步:
第一步:实例化Bean
第二部:Bean属性赋值
第三步:初始化Bean
第四步:使用Bean
第五步:销毁Bean

Bean的生命周期七步:比五步添加的那两步在哪里? 在初始化Bean的前和后。
第一步:实例化Bean
第二部:Bean属性赋值
第三步:执行“Bean后处理器”的before方法
第四步:初始化Bean
第五步:执行“Bean后处理器”的after方法
第六步:使用Bean
第七步:销毁Bean

Bean的生命周期十步:比七步添加的那三步在哪里?
点位1:在“Bean后处理器”的before方法前
干了什么事儿?
检查Bean是否实现了Aware相关接口,如果实现了接口则调用这些接口中的方法。
然后调用这些方法的目的是为了给你传递一些数据,让你更加方便使用。

点位2:在“Bean后处理器”的before方法后
干了什么事儿?
检查Bean是否实现了InitializingBean相关接口,如果实现了接口则调用接口中的方法。

点位3:使用Bean后 或者 销毁Bean前
干了什么事儿?
检查Bean是否实现了DisposableBean相关接口,如果实现了接口则调用接口中的方法。

添加的这三个点位的特点:都是在检查你这个Bean是否实现了某些特定的接口,如果实现了这些接口,则Spring容器会调用这个接口中的方法。

十步输出结果如下:

第一步:无参数构造方法执行。
第二步:给对象的属性赋值。
第三步:
这个Bean的名字是:张三
Bean这个类的加载器:jdk.internal.loader.ClassLoaders$AppClassLoader@63947c6b
生产这个Bean的工厂对象是:org.springframework.beans.factory.support.DefaultListableBeanFactory@1e730495: defining beans [com.powernode.spring6.bean.LogBeanPostProcessor#0,user]; root of factory hierarchy
第四步:执行Bean后处理器的before方法。
第五步:InitializingBean 中的 afterPropertiesSet方法执行。
第六步:初始化Bean
第七步:执行Bean后处理器的after方法
第八步:使用Bean:com.powernode.spring6.bean.User@41d477ed
第九步:DisposableBean 中的 destroy方法执行。
第十步:销毁Bean

注意 :

Spring 根据Bean的作用域来选择管理方式。

  • 对于singleton作用域的Bean,Spring 能够精确地知道该Bean何时被创建,何时初始化完成,以及何时被销毁;

  • 而对于 prototype 作用域的 Bean,Spring 只负责创建,当容器创建了 Bean 的实例后,Bean 的实例就交给客户端代码管理,Spring容器将不再跟踪其生命周期。

  • 通过测试一目了然。只执行了前8步,第9和10都没有执行。

Spring进阶(十七)之spring生命周期 spring生命周期详解,多看几遍!!! 阅读详情

相关推荐

Bean的生命周期

生命周期指的是一个对象从诞生到销毁的整个生命过程,我们把这个过程就叫做一个对象的生命周期。

2202_75555590的博客 1138

【Spring6】| Bean的生命周期(五步、七步、十步法剖析)

【Spring6】| Bean的生命周期(五步、七步、十步法剖析)

m0_61933976的博客 2万+

【一起学Spring】Bean生命周期十步拆解法之实例化Bean

Bean生命周期十步拆解法之实例化Bean,通过一点点的增加功能,了解Bean创建销毁的流程,加深影响,提高对核心流程的认知,快来学习吧。

weixin_43100952的博客 1087

spring 中的IOC 操作 Bean 管理(bean 生命周期)

1、生命周期 (1)从对象创建到对象销毁的过程 2、bean 生命周期 (1)通过构造器创建 bean 实例(无参数构造) (2)为 bean 的属性设置值和对其他 bean 引用(调用 set 方法) (3)调用 bean 的初始化的方法(需要进行配置初始化的方法) (4)bean 可以使用了(对象获取到了) (5)当容器关闭时候,调用 bean 的销毁的方法(需要进行配置销毁的方法) 3、演示 bean 生命周期 package net.cybclass.sp.d

qq_34709784的博客 493

DisplayPort信号通道深度解析:从物理层到协议栈

DisplayPort(DP)是一种面向高速串行通信的数字显示接口标准,其核心在于嵌入式时钟、自适应均衡与链路训练三位一体的物理层架构。不同于HDMI依赖独立时钟的TMDS方案,DP通过差分主链路(Main Link)承载编码数据流,以8b/10b或128b/132b编码实现高带宽与强鲁棒性。该技术价值体现在多速率自适应、误码恢复能力及对PCB布线与阻抗控制的严苛要求,广泛应用于8K显示、工业视觉、GPU直连等高性能场景。本文聚焦DP信号通道的管脚级实现、三层协议解耦(物理层/数据链路层/事务层)及链路训练

weixin_34214500的博客 256

HarmonyOS ArkTS开发实战:用Axios封装一个通用的网络请求工具类(附完整代码)

本文详细介绍了如何在HarmonyOS ArkTS开发中利用Axios封装一个通用的网络请求工具类,涵盖架构设计、核心模块实现、UI状态联动及高级功能扩展。通过单例控制器、拦截器链配置和Token自动刷新机制,提升网络请求的稳定性和可维护性,适用于各类HarmonyOS应用开发场景。

weixin_30772105的博客 491

Spring6 当中 Bean 的生命周期的详细解析:有五步,有七步,有十步

Spring 其实就是一个管理Bean对象的工厂。它负责对象的创建,对象的销毁等。所谓的生命周期:简单的来说:就是一个对象从创建开始到最终销毁的整个过程。什么时候创建Bean 对象?创建 Bean 对象的前后会调用什么方法?Bean 对象什么时候销毁?Bean 对象的在销毁前后会调用生命方法?那么我们为什么要知道 Bean 的生命周期呢?其实生命周期的本质是:在哪个时间节点上调用了哪个类当中的哪个方法。我们需要充分的了解在这个生命线当中,都有哪些特殊的时间节点。

weixin_61635597的博客 1399

新手小白如何学习编程

学习目标推荐第一门语言优势网站 / APP 开发(前端)JavaScript浏览器原生支持,能快速做出可视化效果后端 / 服务器 / 数据分析Python语法简洁像英语,库多、应用广(入门友好)游戏开发先用电竞入门,再转专业引擎硬件 / 嵌入式(比如单片机)C 语言贴近硬件,行业标准办公自动化(Excel / 文档处理)Python快速解决重复工作(比如批量改文件)👉新手首选推荐。

2501_94331842的博客 2233

Springboot 的Bean生命周期五步、七步、十步详解以及框架源码解读生命周期-面试热点-xunznux

Bean 生命周期的本质是:在哪个时间节点上调用了哪个类的哪个方法。 我们需要充分的了解在这个生命线上,都有哪些特殊的时间节点。 只有我们知道了特殊的时间节点都在哪,到时我们才可以确定代码写到哪。 我们可能需要在某个特殊的时间点上执行一段特定的代码,这段代码就可以放到这个节点上。当生命线走到这里的时候,自然会被调用。

weixin_44615954的博客 2186

Android Qcom USB Driver学习(五)

在前面的第二期中,我们知道一些非标的USB的充电类型Floatingcharger,其具有和普通DCP相似的大电流能力,但在最初检测的时候会限制Inputcurrentlimit到100mA,来进行检测是否是SDP类型,所以要支持大电流输入就需要进行vote操作,前面的几篇都有涉及,所以本文学习一下pmicusbcharger都相关的vote机制。...

Android驱动开发 2902

《玩儿起来吧》MATLAB 实时图像处理系列(一二三四)

大家学了图像处理之后,是不是就想学以致用。而要用于生活中,最好的方式就是和摄像头搭配,实现实时图像处理。今天就给大家分享MATLAB实时图像处理的基础方法,希望能帮你快速入门。

HPC_ZY 1万+

【Spring】Spring的Bean的生命周期

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

qq_46096136的博客 1万+

NLP-Beginner 任务一:基于机器学习的文本分类(超详细!!)

NLP-Beginner 任务一:基于机器学习的文本分类传送门一. 介绍1.1 任务简介1.2 数据集1.3 流程介绍二. 特征提取2.1 词袋特征(Bag-of-word)2.2 N元特征 (N-gram)三. 最优化求解3.1 Softmax回归介绍3.2 损失函数3.3 梯度下降3.4 学习率四. 代码及实现4.1 实验设置4.2 结果展示4.3 代码新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、

0oTedo0 9935

Spring Bean 生命周期

Spring Bean生命周期概述:Spring容器管理Bean的完整生命周期,包括实例化、依赖注入、初始化及销毁等环节。核心流程可分为五步:实例化对象→属性赋值→初始化→使用→销毁;若考虑BeanPostProcessor扩展点,可细化为七步:在初始化前后插入处理器回调。理解生命周期有助于在正确时机执行资源初始化/释放、避免隐蔽问题、扩展框架功能。通过注解或接口可实现自定义逻辑,不同作用域影响销毁时机。测试程序展示了典型生命周期方法的调用顺序。

m0_51431003的博客 1022

Python爬虫实战:研究Pandas,构建车质网各车型数据采集和分析系统

研究结果表明,通过网络爬虫技术可以有效地获取公开的汽车投诉数据,这些数据经过适当的清洗和处理后,可以揭示出丰富的汽车质量信息。)作为国内专业的汽车质量投诉受理平台,自 2010 年成立以来,已累计接收消费者投诉信息超过 200 万条,这些数据包含了车型、投诉时间、投诉问题、处理状态等多维度信息,具有极高的分析价值。:通过对车质网数据的分析,能够挖掘出有价值的汽车质量信息,为消费者购车提供参考,为汽车厂商改进产品质量和服务提供依据,同时也能为相关监管部门提供数据支持。

ylfhpy的博客 938

YOLOv13改进策略【Backbone/轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块

本文记录的是。StarNet设计简洁,没有复杂的设计和精细调整的超参数,仅是一个 4 阶段的分层架构。并且其中能够在低维空间计算的同时考虑极高维的特征这一特性,进而提高模型精度。本文在替换骨干网络中配置了原论文中的starnet_s1starnet_s2starnet_s3和starnet_s4七种模型,以满足不同的需求。

Limiiiing的博客 671

Spring Bean的生命周期 五步 七步 十步 循序渐进

1. 实例化 2. 属性赋值 3. aware 4. 后置处理器前置 5. Initialzingbean 接口 6. 初始化 7. 后置处理器后置 8. 使用 9. disposable 接口 destroy() 10. 销毁

人言束负兑生|完美是完蛋的开始 808

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

spring之Bean的生命周期

Bean的生命周期,Bean的作用域

qq_42338744的博客 1105

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Spring Bean 生命周期 五步->七步->十步 扩展学习总结 bean作用域 Scope,手动注册自己new的对象

即当我们实际使用一个对象时,它是何时被创建出来,何时被赋予基础属性,何时可以被我们调整,何时被实际投入spring 容器中进入可使用状态,又在何时被销毁释放不再使用。Spring 只负责创建,当容器创建了 Bean 的实例后,Bean 的实例就交给客户端代码管理,Spring 容器将不再跟踪其生命周期。:Spring容器根据配置信息(如XML配置文件或注解)找到定义好的Bean,并使用构造器或工厂方法创建Bean的实例。Spring 能够精确地知道该Bean何时被创建,何时初始化完成,以及何时被销毁。

weixin_44131922的博客 959

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Spring 中Bean 的生命周期

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

程序员cxuan的个人主页 7680

spring-第八章 bean的生命周期

本章介绍bean的生命周期。Spring其实就是一个管理Bean对象的工厂。它负责对象的创建,对象的销毁等。所谓的生命周期就是:对象从创建开始到最终销毁的整个过程。什么时候创建Bean对象?创建Bean对象的前后会调用什么方法?Bean对象什么时候销毁?Bean对象的销毁前后调用什么方法?本章介绍bean的生命周期后,可以对IOC中的实例有更深的理解。

m0_74606902的博客 1040

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万+

Spring中bean的生命周期(笔记)

第三步:初始化bean(会调用bean的init方法,注意,这个init需要自己去配自己写)* 第三步:初始化bean(会调用bean的init方法,注意,这个init需要自己去配自己写)第三步:初始化bean(会调用bean的init方法,注意,这个init需要自己去配自己写)* --------------到这步就基本完成了-------------------* --------------到这步就基本完成了-------------------* 第二步:给bean属性赋值(调用set方法)

m0_75134325的博客 1041

【spring】一文带你弄懂Spring Bean的生命周期(超详细,超级通俗易懂!!)

然后再在配置文件中进行配置,就可以启用啦结果展示。

miles067的博客 3256

Spring Bean的生命周期

Bean的生命周期可以细分为十步,分别是实例化BeanBean属性赋值检查Bean是否实现了Aware相关的接口执行Bean后处理器的before方法检查Bean是否实现了InitializingBean接口Bean初始化执行Bean后处理器的after方法使用Bean检查Bean是否实现了DisposableBean接口销毁Bean如果想要针对源码进行分析,可以看AbstractAutowireCapableBeanFactory类当中的doCreateBean()方法。

t303的博客 400
上一篇: FactoryBean的用法之日期格式转换
下一篇: 自己new的对象纳入spring容器管理
refreshh
博客等级 码龄4年 0粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值