news 2026/4/23 13:33:08

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/4/22 22:25:32

三星耳机终极指南:解锁隐藏功能的完整教程

三星耳机终极指南:解锁隐藏功能的完整教程 【免费下载链接】GalaxyBudsClient Unofficial Galaxy Buds Manager for Windows, macOS, and Linux 项目地址: https://gitcode.com/gh_mirrors/gal/GalaxyBudsClient 你是否曾觉得自己的三星耳机还有很多未被发掘…

作者头像 李华
网站建设 2026/4/23 13:02:12

Node.js 中 JWT 的使用详解

JWT(JSON Web Token)在 Node.js 中的加密与解密机制以及过期判断 目录 一、JWT结构 二、Node.js 加解密(验证)JWT 2.1 安装库 2.2 生成 Token(签名) 2.3 解密(验证)Token 2.4 …

作者头像 李华
网站建设 2026/4/19 9:34:37

钓鱼式兼职:黑产的心理与技术陷阱

在互联网时代,信息的便捷与开放为人们提供了前所未有的机遇,但同时也滋生了大量隐蔽而复杂的网络犯罪。其中,“网络钓鱼”作为一种经典且持续演进的网络攻击手段,早已不再局限于伪造银行网站或窃取账号密码的初级阶段。近年来&…

作者头像 李华
网站建设 2026/4/23 12:51:06

51、深入探索 Linux 内核定制:从模块管理到内核编译

深入探索 Linux 内核定制:从模块管理到内核编译 1. 引言 Linux 内核作为操作系统的核心,与计算机硬件紧密交互。通过定制内核,我们可以提供额外的硬件支持、改变现有硬件支持方式,还能优化系统性能。本文将详细介绍 Linux 内核定制的相关知识,包括内核模块的使用、新内核…

作者头像 李华
网站建设 2026/4/18 12:31:02

局域网光纤传输方案备选?

那天在咖啡馆里,我无意间听到两位IT经理讨论着他们公司内部网络升级的问题。其中一位提到:“我们正在考虑将现有的铜缆换成光纤,但不确定这是否真的适合我们的业务。”这句话让我意识到,对于很多企业来说,选择合适的局…

作者头像 李华