news 2026/9/18 22:40:29

spring项目各种初始化操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
spring项目各种初始化操作
/** * 实际运行执行顺序总结: * 1. 序1: @PostConstruct 、 序2:InitializingBean.afterPropertiesSet()、序3:@Bean(initMethod = "init"):在 Bean 初始化完成后执行,优先级最高。 * * 2.序4:SmartInitializingSingleton:在所有单例 Bean 初始化完成后执行。 * * 3.序5:@EventListener:根据监听的事件类型决定执行时机,例如 ContextRefreshedEvent 通常在应用启动完成后触发。 * * 4.序6:ApplicationRunner 和 序7:CommandLineRunner:在 Spring Boot 应用启动完成后执行,@Order 决定它们的执行顺序。 * * * 选择建议 * 1.如果是单个 Bean 的初始化,优先使用 @PostConstruct 或 InitializingBean。 * * 2.如果是全局初始化逻辑,优先使用 CommandLineRunner 或 ApplicationRunner。 * * 3.如果需要监听特定事件,使用 @EventListener。 * * 4.如果需要在所有单例 Bean 初始化完成后执行,使用 SmartInitializingSingleton。 */

上代码:

/** 一 * 在 Spring Boot 应用中,CommandLineRunner、ApplicationRunner 和 @PostConstruct 都可以用于在应用启动时执行一些初始化逻辑。 * 它们的执行顺序如下: * * 执行顺序 * 1.@PostConstruct * @PostConstruct 是 Java 提供的注解,用于在 Bean 初始化完成后立即执行。 * 它的执行时机是在 Spring 容器完成依赖注入(即所有 @Autowired 或构造函数注入完成)之后,但在 CommandLineRunner 和 ApplicationRunner 之前。 * 优先级最高。 * * 2.CommandLineRunner 和 ApplicationRunner * 这两个接口的实现类会在 Spring Boot 应用完全启动后执行。 * 它们的执行顺序取决于 @Order 注解或实现 Ordered 接口的顺序。 * 如果没有指定顺序,默认情况下,CommandLineRunner 和 ApplicationRunner 的执行顺序是不确定的。 * * * @Author:hw0089751 * @Date:2025/12/10 */ @Component public class CaffeineManualExamplePostConstruct { /** * 1. @PostConstruct * 执行时机:Bean 初始化完成后,Spring 容器启动过程中。 * 适用场景:用于初始化与当前 Bean 相关的资源或逻辑。 * * @throws Exception */ @PostConstruct public void init() throws Exception { System.out.println("初始化============执行 @PostConstruct 的 init 方法"); } } // 二 @Component public class MyInitBean implements InitializingBean { @Override public void afterPropertiesSet() throws Exception { System.out.println("初始化============执行 InitializingBean 的 afterPropertiesSet 方法"); } } // 三 @Configuration public class AppConfig { @Bean(initMethod = "init") public MyBean myBean() { return new MyBean(); } } public class MyBean { public void init() { System.out.println("初始化============执行 @Bean 的 initMethod 方法"); } } // 四 @Component public class MySmartInitializingSingleton implements SmartInitializingSingleton { @Override public void afterSingletonsInstantiated() { System.out.println("初始化============执行 SmartInitializingSingleton 的 afterSingletonsInstantiated 方法"); } } // 五 @Component public class MyEventListener { @EventListener public void onApplicationEvent(ContextRefreshedEvent event) { System.out.println("初始化============执行 @EventListener 的 onApplicationEvent 方法"); } } // 六 /** * 3. ApplicationRunner * 执行时机:与 CommandLineRunner 相同,Spring Boot 应用启动完成后执行。 * 适用场景:与 CommandLineRunner 类似,但 ApplicationRunner 提供了更强大的参数解析功能。 * * @Author:hw0089751 * @Date:2025/12/10 */ @Component public class CaffeineManualExampleApplicationRunner implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { System.out.println("初始化============执行 ApplicationRunner 的 run 方法"); } } package com.example.demo.runner; import com.example.demo.caffe3.CaffeineService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; // 七 /** * Caffeine 本地缓存 * * Caffeine 是一个高性能的 Java 缓存库,主要用于实现本地缓存。它提供了灵活的配置选项和强大的功能, * 适合各种场景的缓存需求。 * * 核心功能: * 1基于大小的缓存驱逐:可以设置缓存的最大容量,超出容量时会自动驱逐旧数据。 * 2基于时间的缓存驱逐:支持设置数据的过期时间,例如固定时间后自动移除。 * 3基于权重的缓存驱逐:可以根据权重来决定缓存的驱逐策略。 * 4异步加载:支持异步加载数据,提升性能。 * 5统计功能:可以统计缓存的命中率、加载时间等指标。 * * 使用场景: * 1本地缓存:适合存储频繁访问的热点数据,减少数据库或远程服务的访问压力。 * 2短期数据存储:存储临时数据,例如会话信息、配置数据等。 * 3性能优化:通过缓存减少计算或查询的开销。 * */ @Component public class CaffeineManualExampleCommandLineRunner implements CommandLineRunner { /** * 2. CommandLineRunner * 执行时机:Spring Boot 应用启动完成后,run 方法会被调用。 * 适用场景:用于在应用启动后执行一些全局的初始化逻辑。 */ @Override public void run(String... args) throws Exception { System.out.println("初始化============执行 CommandLineRunner 的 run 方法"); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 19:59:07

【完整源码+数据集+部署教程】动力电池等检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

一、背景意义 随着全球对可再生能源和电动交通工具的日益关注,动力电池的应用范围不断扩大,涵盖了从电动汽车到便携式电子设备等多个领域。动力电池的种类繁多,包括汽车电池、自行车电池、干电池、笔记本电脑电池和智能手机电池等。随着这些电…

作者头像 李华
网站建设 2026/9/18 21:20:28

TDK/INVENSENSE/应美盛传感器ICM-42670-P的概述

ICM-42670-P 是 TDK(InvenSense)公司生产的一款高性能、低功耗的6轴运动传感器(IMU - 惯性测量单元)。它集成了一个3轴陀螺仪和一个3轴加速度计于一个紧凑的芯片封装内。ICM-42670-P的核心特性1️⃣. 超低功耗典范◾ 核心优势&…

作者头像 李华
网站建设 2026/9/18 10:03:00

《公共管理学》2025网课答案

文章目录第一章 公共管理的概念及发展--本章习题第二章 政府职能与政府治理--本章习题第三章 公共部门战略管理--本章习题第四章 公共政策的制定与执行--本章习题第五章 公共组织管理--本章习题第六章 公共部门领导--本章习题第七章 公共责任与伦理--本章习题第一章 公共管理的…

作者头像 李华
网站建设 2026/9/19 1:06:46

无需复杂配置!在家也能远程操控 Kali 桌面,cpolar这招太实用了

本文介绍了通过 Xrdp 和 cpolar 实现远程操控 Kali 桌面的方法。首先在 Kali 上安装 Xrdp,更新包管理器后执行安装命令,启用并启动服务,确认 3389 端口开放。本地测试时需退出桌面至锁屏,通过 Windows 远程桌面工具输入局域网 IP …

作者头像 李华
网站建设 2026/9/19 0:53:36

哪吒监控:打造企业级服务器监控体系的5大核心优势

服务器监控是现代IT运维的基石,而哪吒监控(Nezha Monitoring)作为一款自托管的轻量级解决方案,正在重新定义监控工具的标准。这款工具不仅提供实时性能监控,更通过智能警报和自动化运维功能,帮助运维团队构…

作者头像 李华
网站建设 2026/9/18 19:27:41

终极指南:5分钟快速部署IoTSharp物联网平台

终极指南:5分钟快速部署IoTSharp物联网平台 【免费下载链接】IoTSharp IoTSharp is an open-source IoT platform for data collection, processing, visualization, and device management. 项目地址: https://gitcode.com/gh_mirrors/io/IoTSharp IoTSharp…

作者头像 李华