当前位置: 首页 > news >正文

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 状态。

相关文章:

  • Oracle测试题目及笔记(多选)
  • OpenAI发布GPT-4.1系列模型,主打编程能力提升
  • 泛型算法——只读算法(一)
  • Oracle 处理“不允许长度为0的列”(ORA-01723)问题解析
  • Oracle_00000
  • Spring Boot 学习总结(35)—— 使用 SpringAI 实现 MCP 服务并与 Qwen 集成使用?
  • 图形变换算法
  • 通过gird布局实现div的响应式分布排列
  • 生物信息学技能树(Bioinformatics)与学习路径
  • Ubuntu + VSCode 开发 STM32:用全开源工具,点亮你的第一盏 LED
  • 线性代数 | 知识点整理 Ref 3
  • AI在多Agent协同领域的核心概念、技术方法、应用场景及挑战 的详细解析
  • 【刷题Day18】HTTP状态码与请求(浅)
  • Leetcode 3359. 查找最大元素不超过 K 的有序子矩阵【Plus题】
  • dumpsys--音频服务状态信息
  • GUI GUIDIER8.2版本兼容8.3.1版本
  • SLAM | 激光SLAM中的退化问题
  • Linux系统中的Perf总结
  • LabVIEW 开发:永不落幕的求知之旅​
  • 【C++初阶】--- list容器功能模拟实现
  • 国家统计局公布2024年城镇单位就业人员年平均工资情况
  • 广西北部湾国际港务集团副总经理潘料庭接受审查调查
  • 跨文化戏剧的拓荒者与传承者——洪深与复旦剧社的百年回响
  • 首个偏头痛急性治疗药物可缓解前期症状
  • 新能源汽车,告别混乱创新
  • 乌拉圭前总统何塞·穆希卡去世