Vue 和 Spring boot 和 Bean 不同生命周期

一、Vue 组件生命周期

在这里插入图片描述
父子组件生命周期顺序:

创建时:
父 beforeCreate → 父 created → 父 beforeMount → 子组件生命周期 → 父 mounted

更新时:
父 beforeUpdate → 子组件更新 → 父 updated。

销毁时:
父 beforeDestroy → 子组件销毁 → 父 destroyed。

二、Spring Boot 应用生命周期

Spring Boot 应用从启动到关闭的全过程可分为三个阶段,开发者可通过扩展点介入控制。

Ai 代码

  • 启动阶段:

初始化SpringApplication:创建实例,准备启动参数。
运行SpringApplication:调用run()方法启动应用。
发布事件:ApplicationStartingEvent,标志应用开始启动。

  • 配置加载阶段:

加载默认配置:从spring-boot-starter-parent继承。
加载应用配置:从application.properties或application.yml加载。
加载环境配置:根据激活的Profile加载特定配置。

  • Bean创建阶段:

组件扫描:扫描带有@Component等注解的类。
Bean定义:解析@Bean注解的方法。
依赖注入:通过@Autowired等注解注入依赖。

  • 上下文刷新阶段:

刷新上下文:初始化非懒加载的Bean。
发布事件:ApplicationEnvironmentPreparedEvent、ApplicationPreparedEvent、ApplicationStartedEvent。

  • Web服务器启动阶段:

启动嵌入式服务器:如Tomcat,开始监听端口。
注册Servlet和Filter:配置DispatcherServlet处理请求。

应用运行阶段:
处理请求:接收并路由HTTP请求到控制器。
定时任务和异步处理:执行@Scheduled任务和@Async方法。

  • 关闭阶段:

接收关闭信号:如SIGTERM或调用shutdown()。
执行关闭逻辑:停止服务器,销毁Bean。
发布事件:ApplicationExitEvent,表示应用已退出。

三、Spring Bean 应用生命周期

  1. 实例化前
    元信息解析:容器解析配置文件(XML/Java/注解)中的 Bean 定义,生成 BeanDefinition 对象。
    验证 Bean 的依赖关系是否满足(如循环依赖检测)

  2. 实例化
    反射创建:通过默认构造函数或无参工厂方法创建 Bean 实例。
    单例 vs 原型:
    单例(Singleton):容器启动时立即实例化。
    原型(Prototype):每次通过 getBean() 获取时创建新实例。

  3. 属性赋值
    依赖注入:通过 @Autowired、@Value 或 XML 的 注入属性值。
    依赖解析:解析 Bean 之间的引用关系,确保依赖项已初始化。

  4. 初始化前
    BeanPostProcessor 前处理:调用 postProcessBeforeInitialization,允许修改 Bean 或添加代理(如 AOP)。

  5. 初始化
    BeanNameAware:注入 Bean 的名称。
    BeanFactoryAware:注入 BeanFactory 实例。
    ApplicationContextAware:注入应用上下文。


自定义初始化:
@PostConstruct 注解方法。
实现 InitializingBean 接口的 afterPropertiesSet()。
XML 配置的 init-method。
6. 初始化后
BeanPostProcessor 后处理:调用 postProcessAfterInitialization,完成最终增强(如生成动态代理)。
7. 使用阶段
就绪状态:Bean 已完全初始化,可供应用调用
8. 销毁前
DestructionAwareBeanPostProcessor 处理:执行销毁前的扩展逻辑(如关闭资源检查)。
9. 销毁
自定义销毁:
@PreDestroy 注解方法。
实现 DisposableBean 接口的 destroy()。
XML 配置的 destroy-method。
作用域影响:
单例:容器关闭时自动触发销毁。
原型/请求/会话:需手动调用 destroy() 或依赖作用域结束。
在这里插入图片描述
在这里插入图片描述
最佳实践
资源管理:
在 @PostConstruct 中初始化外部资源(如数据库连接)。
在 @PreDestroy 中释放资源(如关闭文件句柄)。

避免循环依赖 单出一篇 :
使用 @Lazy 延迟加载依赖项。
通过接口解耦设计。

作用域选择:
默认使用单例,频繁创建或需隔离状态的 Bean 使用原型。
调试工具:
启用 DEBUG 日志观察 Bean 生命周期。
使用 Spring Boot Actuator 的 /beans 端点查看 Bean 状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/77303.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Microsoft Azure 基础知识简介

Microsoft Azure 基础知识简介 已完成100 XP 2 分钟 Microsoft Azure 是一个云计算平台,提供一系列不断扩展的服务,可帮助你构建解决方案来满足业务目标。 Azure 服务支持从简单到复杂的一切内容。 Azure 具有简单的 Web 服务,用于在云中托…

C语言链接数据库

目录 使用 yum 配置 mysqld 环境 查看 mysqld 服务的版本 创建 mysql 句柄 链接数据库 使用数据库 增加数据 修改数据 查询数据 获取查询结果的行数 获取查询结果的列数 获取查询结果的列名 获取查询结果所有数据 断开链接 C语言访问mysql数据库整体源码 通过…

【Maven】手动安装依赖到本地仓库

【Maven】手动安装依赖到本地仓库 【一】下载依赖【二】安装 JAR 文件到本地仓库【三】验证安装【四】在项目中使用该依赖【1】注意事项【2】额外提示 【一】下载依赖 登录到中央仓库下载依赖,中央仓库地址:https://mvnrepository.com/ 搜搜你的依赖的a…

腾讯云golang一面

go垃圾回收机制 参考自:https://zhuanlan.zhihu.com/p/334999060 go 1.3 标记清除法 缺点 go 1.5 三色标记法 屏障机制 插入屏障 但是如果栈不添加,当全部三色标记扫描之后,栈上有可能依然存在白色对象被引用的情况(如上图的对象9). 所以要对栈重新进行三色标记扫…

跨平台嵌入式音视频开发指南:EasyRTC音视频通话的多场景适配与AI扩展能力

在数字化通信技术飞速发展的今天,实时音视频通信已成为众多智能设备和应用的核心功能。从智能家居到远程办公,从在线教育到智能安防,音视频通信技术的应用场景不断拓展,对低延迟、高稳定性和跨平台兼容性的需求也在持续增长。在这…

Android 11 去掉性能受到影响通知

源码位置: frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java final void finishBooting() {TimingsTraceAndSlog t = new TimingsTraceAndSlog(TAG + "Timing",Trace.TRACE_TAG_ACTIVITY_MANAGER);t.traceBegin("Finis…

Mac idea WordExcel等文件git modify 一直提示修改状态

CRLF LF CR 换行符自动转换问题 查看状态:git config --global --list Mac需要开启,window下需要关闭 关闭命令:git config --global core.autocrlf false 命令解释: autocrlf true 表示要求git在提交时将crlf转换为lf&a…

Apache Commons CLI 入门教程:轻松解析命令行参数

文章目录 Apache Commons CLI 入门教程:轻松解析命令行参数一、什么是 Commons CLI?二、为什么选择 Commons CLI?三、快速开始1. 添加依赖2. 基础示例3. 运行示例1. 在Idea中运行2. 命令行中运行3. 使用 Maven/Gradle 运行(推荐&a…

VS2022调试嵌入式linux C# 程序 高效的开发方案

1.目标板子配置好ssh,确保PC可以连上 2.目标板子上传VSDBG程序,详见我的上一个文章 3.PC安装winfsp, sshfs,SSHFS-Win Manager.傻瓜式安装,将目标板子映射到PC的某个盘 4.VS2022中,你的工程的exe生成目录到上面盘中某个路径 5…

Python中如何加密/解密敏感信息(如用户密码、token)

敏感信息,如用户密码、API密钥、访问令牌(token)、信用卡号以及其他个人身份信息(PII),构成了现代应用程序和系统中最为关键的部分。这些信息一旦被未经授权的第三方获取,可能引发灾难性的后果,从个人隐私泄露到企业经济损失,甚至是大规模的社会安全问题。保护这些敏感…

智能体开发的范式革命:Cangjie Magic全景解读与实践思考

引言:当智能体开发遇见仓颉魔法 在人工智能技术日新月异的今天,智能体(Agent)开发正从实验室走向产业应用的核心舞台。2025年3月,仓颉社区推出的Cangjie Magic开源平台,以其创新的设计理念和技术架构,为这一领域带来了…

【Java学习笔记】位运算

位运算 一、原码,反码,补码 (1) 二进制的最高位是符号位:0 表示正数,1 表示负数(怎么记? 1旋转一下变成-) (2) 正数的原码、反码、补码都一样(三码合一) (3) 负数的反码…

HttpSessionBindingListener 的用法笔记250417

HttpSessionBindingListener 的用法笔记250417 HttpSessionBindingListener 是 Java Servlet 规范中 唯一 由 被存储对象自身实现 的会话监听接口, 1. 核心功能 HttpSessionBindingListener 是一个由 会话属性对象自身实现 的接口,用于监听该对象被绑定…

【HDFS入门】HDFS高可用性与容错机制深度解析

目录 引言 1 HDFS高可用架构实现 1.1 基于QJM的NameNode HA架构 1.2 QJM vs NFS实现对比 2 故障切换流程与ZooKeeper作用 2.1 自动故障转移流程 2.2 状态转换机制 3 数据恢复与副本管理 3.1 DataNode故障处理流程 4 快照与数据保护机制 4.1 HDFS快照架构 4.2 快照使…

04-libVLC的视频播放器:获取媒体信息

libvlc_media_t* libvlc_media_player_get_media(libvlc_media_player_t* p_mi); 功能说明 核心作用:获取与媒体播放器关联的当前媒体对象返回值:成功:返回libvlc_media_t*指针失败/无关联媒体:返回NULL内存管理:返回的媒体对象引用计数会增加,需要使用libvlc_media_rele…

使用datax通过HbaseShell封装writer和reader同步hbase数据到hbase_踩坑_细节总结---大数据之DataX工作笔记008

最近在做大数据相关功能,有个需求,使用datax同步hbase到hbase中,其中还是有很多细节值得记录: 首先来看一下datax的源码中,如果你使用phoenix创建的表,那么 你就需要使用对应的hbase带有sql字样的,reader和writer. 然后如果你使用datax-web来进行测试的,那么,他默认使用的是h…

如何通过window端来ssh连接本地虚拟机的ubuntu

首先在 Ubuntu 虚拟机上安装和配置 SSH 服务: # 安装 SSH 服务器 sudo apt update sudo apt install openssh-server# 检查 SSH 服务状态 sudo systemctl status ssh# 如果没有启动,则启动 SSH 服务 sudo systemctl start ssh# 设置开机自启动 sudo sys…

Anolis OS 8.10 发布:软硬协同优化,满足多行业实际应用需求

引言 龙蜥操作系统 Anolis OS 8 是 OpenAnolis 龙蜥社区发行的开源 Linux 发行版,支持多计算架构,提供稳定、高性能、安全、可靠的操作系统支持。Anolis OS 8.10 是 Anolis OS 8 发布的第六个小版本,通过软硬协同,不断完善生态&a…

Java八种常见的设计模式

一、单例模式 单例模式是(Singleton Pattern)Java中最常用的设计模式之一,它保证一个类仅有一个实例,并提供一个全局访问点。 实现单例模式的核心是将类的构造方法私有化,以防止外部直接通过构造函数创建实例。同时&am…

4.17---实现商铺和缓存与数据库双写一致以及宕机处理

实现商铺和缓存与数据库双写一致(以及强双写一致策略) redis点评项目采用的是延时双删策略 双删: 我们更新完数据库之后删除缓存,这样即使有线程并发进来查询,会发现缓存中没有数据,从而会去mysql中查找…