news 2026/10/14 23:10:20

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/10/15 18:12:57

毕业一年后对于大学计科课程的回顾和感受

我们学校年年都有课程评价,在毕业的时候还有对课程体系设计的评价和想法。可是那个时候我是真的云里雾里啊能说出来什么。最近我在学习RTOS,突然想起操作系统这门课程,真是瞬间心头堵的慌——因为我当年没有完全征服它。大三的课程真是又实际…

作者头像 李华
网站建设 2026/10/14 22:44:50

“AI+虚仿”实训:破解三高三难,培育新时代无人机救援尖兵

在应急救援领域,无人机技术正发挥着越来越重要的作用。然而,传统无人机火灾救援实训面临着高危险、高成本、难复现等严峻挑战。随着国家职业教育改革战略深入推进,“人工智能职业教育”已成为推动教育数字化战略转型的重要引擎。恒点充分把握…

作者头像 李华
网站建设 2026/10/14 18:26:43

如何平衡服务器内存使用率和系统稳定性?

平衡服务器内存使用率和系统稳定性需要从监控预警、配置调优、应用优化、容量规划四个维度综合施策,在保障业务性能的同时确保系统长期稳定运行。一、监控预警体系:建立三道防线1. 多级告警阈值设置根据服务器类型和业务特点,建立分层次的告警…

作者头像 李华
网站建设 2026/10/14 9:13:01

缠论Python框架实战:从零构建量化交易系统的终极指南

缠论Python框架实战:从零构建量化交易系统的终极指南 【免费下载链接】chan.py 开放式的缠论python实现框架,支持形态学/动力学买卖点分析计算,多级别K线联立,区间套策略,可视化绘图,多种数据接入&#xff…

作者头像 李华
网站建设 2026/10/15 1:10:02

49、Linux系统操作、故障排除与性能优化全解析

Linux系统操作、故障排除与性能优化全解析 1. Linux系统基础操作 在Linux系统中,有许多基础操作可以帮助我们管理软件和文件。以下是一些常见操作的示例: - 卸载软件 :在命令提示符下,输入 rpm –e tripwire 并按回车键,此命令用于卸载Tripwire软件。 - 查询软件…

作者头像 李华
网站建设 2026/10/15 4:05:22

DataEase vs PowerBI:开源生态如何重塑企业数据分析格局

当企业数据量以每年40%的速度增长,传统的商业BI工具是否还能满足灵活多变的业务需求?在数字化转型浪潮中,越来越多的技术决策者开始重新审视工具选择标准:除了功能完备性,更需要考虑技术生态的完整性、社区活力的持续性…

作者头像 李华