Spring Boot 事件监听机制完整开发指南

【Spring Boot 3】事件机制 定义事件类定义事件发布定时事件监听其中每一步都有多种方法实现,本文即是介绍开发Spring Boot应用实现事件机制的这些方法。Spring事件默认是单线程执行的,好处在于事件监听和事件发布可以使用同样的事务(Transaction)上下文;本文介绍的配置多线程执行的方法将对应用中所有的事件监听器生效,如果想控制只为其中某些监听器生效,则不需要本文中的定义,只需在需要多线程执行的事件监听器方法上添加@Async注解即可。 阅读详情

以下是关于 Spring Boot 事件监听机制 的完整开发指南,涵盖原理、生命周期、内置事件、自定义监听器、排序机制、必知监听器详解、常见问题与最佳实践,并附有带详细中文注释的标准实战示例,完全符合你对“实际开发参考价值”和“中文注释”的要求。


📜 Spring Boot 事件监听机制完整开发指南

一、事件监听机制原理(Event-Driven Architecture)

Spring 的事件机制基于 观察者模式(Observer Pattern),核心是 ApplicationEvent 与 ApplicationListener 的发布-订阅模型。

核心组件:

组件说明
ApplicationEvent所有事件的基类,代表一个“事件发生”
ApplicationListener<E extends ApplicationEvent>事件监听器接口,监听特定事件类型
ApplicationEventPublisher事件发布器,用于发布事件(Spring 容器自动注入)
ApplicationEventMulticaster事件多播器,负责将事件分发给所有匹配的监听器

✅ 原理流程:

  1. 某个组件调用 applicationEventPublisher.publishEvent(event)
  2. Spring 容器的 ApplicationEventMulticaster 查找所有注册的、能处理该事件类型的 ApplicationListener
  3. 依次调用这些监听器的 onApplicationEvent() 方法(同步阻塞,默认单线程)

二、Spring Boot 事件生命周期

Spring Boot 应用启动/关闭过程中会触发一系列内置事件,按执行顺序如下:

生命周期阶段事件类触发时机
容器初始化前ApplicationStartingEventSpringApplication.run() 刚开始执行
环境准备完成ApplicationEnvironmentPreparedEventEnvironment 准备完毕,但容器尚未创建
ApplicationContext 创建前ApplicationPreparedEventApplicationContext 已创建,但 Bean 未加载
ApplicationContext 初始化完成ContextRefreshedEvent所有 Bean 加载完成,上下文刷新完毕(最常用)
Web 服务器启动完成WebServerInitializedEvent嵌入式服务器(如 Tomcat)启动完成,端口已绑定
应用启动完成ApplicationReadyEvent应用已完全启动,可处理请求(推荐用于业务初始化)
应用关闭前ApplicationStoppingEvent用户触发关闭(如 Ctrl+C)
应用已关闭ApplicationClosedEvent应用完全退出

⚠️ 注意:ContextRefreshedEvent 在 刷新上下文时触发,若使用 @RefreshScope 或 Actuator 的 /actuator/refresh,它可能被多次触发!


三、Spring Boot 内置事件监听器(必须掌握)

以下是你在实际开发中必须了解和掌握的内置事件及其作用:

事件类作用生效时机使用建议
ApplicationReadyEvent应用完全启动完成,可对外提供服务所有 Bean 初始化完成、Web 服务器已启动、健康检查通过✅ 推荐用于初始化缓存、连接池、定时任务、注册服务发现
ContextRefreshedEvent上下文刷新完成(Bean 加载完毕)每次调用 refresh() 时触发(包括热部署)⚠️ 避免在此事件中执行耗时操作,可能重复触发
WebServerInitializedEvent嵌入式 Web 服务器(Tomcat/Jetty/Undertow)启动完成端口绑定成功后✅ 用于获取实际端口(如日志打印、健康检查)
ApplicationFailedEvent应用启动失败启动过程中抛出未捕获异常✅ 用于发送告警、记录失败原因
ApplicationStartedEvent应用已启动(但 Web 服务器可能未就绪)ApplicationContext 刷新完成,但 Web 服务器未启动⚠️ 少用,除非你不需要 Web 服务就绪
ApplicationStoppingEvent应用正在停止用户触发关闭(如 System.exit() 或 kill)✅ 用于优雅关闭连接、清理临时文件
ApplicationClosedEvent应用已关闭所有资源释放完毕✅ 用于日志归档、监控上报

✅ 开发建议:

  • 业务初始化 → 优先使用 ApplicationReadyEvent
  • 获取端口 → 使用 WebServerInitializedEvent
  • 异常监控 → 监听 ApplicationFailedEvent
  • 优雅关闭 → 监听 ApplicationStoppingEvent

四、自定义事件监听器开发(标准写法)

步骤 1:定义自定义事件(继承 ApplicationEvent)

import org.springframework.context.ApplicationEvent;

/**
 * 自定义事件:用户注册成功事件
 * 该事件携带用户ID和注册时间,供后续模块(如发邮件、积分奖励)消费
 */
public class UserRegisteredEvent extends ApplicationEvent {

    private final Long userId;           // 用户ID
    private final String email;          // 用户邮箱
    private final long registerTime;     // 注册时间戳(毫秒)

    /**
     * 构造函数:必须调用父类构造器,传入事件源(通常是发布者)
     * @param source 事件源对象(通常为发布该事件的组件,如 UserService)
     * @param userId 用户ID
     * @param email 用户邮箱
     */
    public UserRegisteredEvent(Object source, Long userId, String email) {
        super(source); // 必须调用,Spring 用它追踪事件来源
        this.userId = userId;
        this.email = email;
        this.registerTime = System.currentTimeMillis();
    }

    // Getter 方法,供监听器使用
    public Long getUserId() {
        return userId;
    }

    public String getEmail() {
        return email;
    }

    public long getRegisterTime() {
        return registerTime;
    }

    @Override
    public String toString() {
        return "UserRegisteredEvent{userId=" + userId + ", email='" + email + "', registerTime=" + registerTime + '}';
    }
}

步骤 2:编写事件监听器(实现 ApplicationListener)

import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * 监听用户注册成功事件
 * 作用:在用户注册后,自动发送欢迎邮件
 * 注意:此监听器是 Spring 管理的 Bean,自动注册到事件总线
 */
@Component
public class UserRegisteredEventListener implements ApplicationListener<UserRegisteredEvent> {

    private static final Logger log = LoggerFactory.getLogger(UserRegisteredEventListener.class);

    /**
     * Spring 容器在发布 UserRegisteredEvent 时,自动调用此方法
     * 该方法是同步执行的,阻塞发布者线程,因此应避免耗时操作
     * 如需异步,可结合 @Async 或消息队列
     *
     * @param event 用户注册事件对象,包含用户ID、邮箱等信息
     */
    @Override
    public void onApplicationEvent(UserRegisteredEvent event) {
        // 打印事件来源(如 UserService 实例)
        log.info("【事件监听】收到用户注册事件,来自: {}", event.getSource().getClass().getSimpleName());

        // 提取事件数据
        Long userId = event.getUserId();
        String email = event.getEmail();
        long registerTime = event.getRegisterTime();

        // 格式化时间
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String formattedTime = LocalDateTime.ofInstant(java.time.Instant.ofEpochMilli(registerTime), 
                java.time.ZoneId.systemDefault()).format(formatter);

        // 模拟发送欢迎邮件(实际项目中应调用邮件服务)
        log.info("✅ 正在为用户 ID={},邮箱={} 发送欢迎邮件...(模拟)", userId, email);
        log.info("⏰ 注册时间: {}", formattedTime);

        // 可在此处调用邮件服务、积分服务、短信服务等
        // sendWelcomeEmail(email);
        // awardPoints(userId, 100);

        log.info("📧 欢迎邮件发送任务已提交(异步执行)");
    }
}

步骤 3:在服务中发布事件(触发监听器)

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;

/**
 * 用户服务:负责用户注册逻辑
 * 在注册成功后,发布自定义事件,解耦后续业务逻辑
 */
@Service
public class UserService {

    @Autowired
    private ApplicationEventPublisher eventPublisher; // Spring 自动注入事件发布器

    /**
     * 用户注册方法
     * 核心:注册成功后,发布事件,而非直接调用邮件服务
     * 实现了业务逻辑与通知逻辑的解耦
     *
     * @param email 用户邮箱
     * @return 注册结果
     */
    public String registerUser(String email) {
        // 1. 校验邮箱格式
        if (email == null || !email.contains("@")) {
            throw new IllegalArgumentException("邮箱格式不合法");
        }

        // 2. 模拟保存用户到数据库(伪代码)
        Long userId = saveUserToDatabase(email); // 假设返回自增ID

        // 3. ✅ 发布事件:通知其他模块“用户已注册”
        // 此处不直接调用 EmailService,而是发布事件,实现松耦合
        eventPublisher.publishEvent(new UserRegisteredEvent(this, userId, email));

        // 4. 返回成功
        return "注册成功,欢迎加入我们!";
    }

    // 模拟保存用户
    private Long saveUserToDatabase(String email) {
        // 模拟数据库插入,返回用户ID
        return 1001L;
    }
}

步骤 4:测试事件是否生效(Controller 触发)

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * 测试控制器:通过 HTTP 请求触发用户注册,从而发布事件
 */
@RestController
public class TestEventController {

    @Autowired
    private UserService userService;

    /**
     * 访问:GET /test/register?email=test@example.com
     * 触发事件监听器,控制台将输出监听日志
     */
    @GetMapping("/test/register")
    public String register(@RequestParam String email) {
        return userService.registerUser(email);
    }
}

✅ 运行效果(控制台输出)

2025-10-14 10:00:00 [http-nio-8080-exec-1] INFO  c.s.UserService - 注册用户:test@example.com
2025-10-14 10:00:00 [http-nio-8080-exec-1] INFO  c.s.UserRegisteredEventListener - 【事件监听】收到用户注册事件,来自: UserService
2025-10-14 10:00:00 [http-nio-8080-exec-1] INFO  c.s.UserRegisteredEventListener - ✅ 正在为用户 ID=1001,邮箱=test@example.com 发送欢迎邮件...(模拟)
2025-10-14 10:00:00 [http-nio-8080-exec-1] INFO  c.s.UserRegisteredEventListener - ⏰ 注册时间: 2025-10-14 10:00:00
2025-10-14 10:00:00 [http-nio-8080-exec-1] INFO  c.s.UserRegisteredEventListener - 📧 欢迎邮件发送任务已提交(异步执行)
2025-10-14 10:00:00 [http-nio-8080-exec-1] INFO  c.s.TestEventController - 返回:注册成功,欢迎加入我们!

五、事件监听器排序(@Order 注解)

多个监听器监听同一事件时,执行顺序默认不确定。如需控制顺序(如先更新缓存,再发消息),使用 @Order 注解。

@Component
@Order(1) // 数字越小,优先级越高
public class CacheUpdateListener implements ApplicationListener<UserRegisteredEvent> {
    @Override
    public void onApplicationEvent(UserRegisteredEvent event) {
        log.info("【优先级1】更新用户缓存:{}", event.getUserId());
    }
}

@Component
@Order(2)
public class NotificationListener implements ApplicationListener<UserRegisteredEvent> {
    @Override
    public void onApplicationEvent(UserRegisteredEvent event) {
        log.info("【优先级2】发送通知:{}", event.getEmail());
    }
}

✅ 最佳实践:

  • 使用 @Order(Ordered.HIGHEST_PRECEDENCE) 表示最高优先级
  • 使用 @Order(Ordered.LOWEST_PRECEDENCE) 表示最低优先级
  • 优先级建议以 10 为单位递增,留出扩展空间

六、异步事件监听(避免阻塞主线程)

默认事件是同步阻塞的。若监听器内有网络调用、IO 操作,会导致发布者线程等待。

✅ 解决方案:使用 @Async

步骤 1:启用异步支持(配置类)
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;

/**
 * 启用 Spring 异步支持
 */
@EnableAsync // 开启异步方法支持
@Configuration
public class AsyncConfig {
    // 可在此配置线程池,如 @Bean public TaskExecutor taskExecutor() {...}
}
步骤 2:监听器方法标记为异步
@Component
public class AsyncEmailListener implements ApplicationListener<UserRegisteredEvent> {

    private static final Logger log = LoggerFactory.getLogger(AsyncEmailListener.class);

    /**
     * 此方法将异步执行,不阻塞主线程
     * 注意:@Async 不能用于 private 方法,且必须在 Spring 管理的 Bean 中
     */
    @Async // ✅ 标记为异步执行
    @Override
    public void onApplicationEvent(UserRegisteredEvent event) {
        log.info("🚀 异步发送欢迎邮件(不会阻塞注册流程)到: {}", event.getEmail());

        // 模拟网络延迟(如调用 SMTP 服务)
        try {
            Thread.sleep(3000); // 模拟耗时操作
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }

        log.info("✅ 异步邮件发送完成,用户ID: {}", event.getUserId());
    }
}

⚠️ 注意事项:

  • @Async 方法必须在 Spring Bean 中,且不能是 private
  • 不能在同一个类中调用 @Async 方法(会被 Spring 代理忽略)
  • 异步监听器失败不会影响主流程,但建议添加异常处理(@Async 默认不抛异常)

七、开发过程中常见问题与注意事项

问题原因解决方案
监听器未生效未加 @Component 或未在 Spring 扫描路径下确保监听器类上有 @Component,或被 @Configuration 类 @Bean 注册
事件被重复触发ContextRefreshedEvent 在热部署/Actuator刷新时多次触发避免在此事件中做初始化,改用 ApplicationReadyEvent
监听器执行慢导致应用启动卡住同步监听器中执行了数据库查询、HTTP 请求改为 @Async 异步处理,或使用消息队列(RabbitMQ/Kafka)
事件顺序混乱多个监听器无排序使用 @Order 明确指定执行顺序
监听器抛异常导致发布者失败默认监听器异常会传播使用 @EventListener + @Async + @ExceptionHandler 包装,或捕获异常
监听器内存泄漏监听器持有大对象或未注销确保监听器是单例,避免持有非静态内部类引用

八、最佳实践总结(开发必看)

原则说明
✅ 优先使用 ApplicationReadyEvent保证所有 Bean、Web 服务、数据库连接都就绪后再执行初始化
✅ 事件应轻量、无副作用事件只通知,不执行核心业务,避免耦合
✅ 耗时操作异步化邮件、短信、日志写入等使用 @Async 或消息队列
✅ 事件命名清晰如 OrderPaidEvent、ProductStockUpdatedEvent,避免 MyEvent
✅ 避免循环事件事件 A 触发事件 B,B 又触发 A,导致栈溢出
✅ 使用 @EventListener 替代 ApplicationListener(推荐)更简洁,支持泛型,支持条件过滤

✅ 推荐写法:使用 @EventListener(更现代)

@Component
public class EventListenerDemo {

    @EventListener
    public void handleUserRegistered(UserRegisteredEvent event) {
        log.info("【@EventListener】监听到用户注册: {}", event.getUserId());
    }

    // 支持条件过滤
    @EventListener(condition = "#event.userId > 1000")
    public void handleHighValueUser(UserRegisteredEvent event) {
        log.info("高价值用户注册: {}", event.getUserId());
    }

    // 支持异步
    @Async
    @EventListener
    public void sendWelcomeEmail(UserRegisteredEvent event) {
        // 异步发送邮件
    }
}

💡 @EventListener 是 Spring 4.2+ 推荐方式,比实现接口更简洁、灵活,强烈推荐在新项目中使用。


九、总结:你必须掌握的监听器清单

事件是否必须掌握作用推荐使用场景
ApplicationReadyEvent✅ 必须应用完全启动初始化缓存、定时任务、注册服务
WebServerInitializedEvent✅ 必须Web 服务器启动完成获取实际端口、打印启动日志
ApplicationFailedEvent✅ 必须启动失败发送告警、记录错误堆栈
ApplicationStoppingEvent✅ 必须应用即将关闭优雅关闭数据库连接、清理临时文件
ContextRefreshedEvent⚠️ 谨慎使用上下文刷新避免在此做初始化,易重复触发
ApplicationClosedEvent✅ 建议应用完全关闭上报监控、归档日志

✅ 最终建议

  • 新项目推荐使用 @EventListener + @Async,代码更简洁、可读性更强。
  • 事件是解耦利器,但不要滥用,避免“事件风暴”。
  • 生产环境务必监控 ApplicationFailedEvent,它是系统健康的第一道防线。
  • 事件不是 RPC,不要通过事件传递复杂业务参数,建议使用 ID + 查询。

解释Spring Boot中事件监听器的作用。 首先,我们可以定义一个。 阅读详情

相关推荐

Spring Boot 监听器详解

SpringApplicationRunListener 是SpringApplication 的运行监听器,提供Spring Boot启动时各个运行状态的监听,可以在应用程序启动的时候执行一些自定义操作或记录一些信息。SpringApplicationRunListener 在run中加载。是Spring 提供的上下文监听器,可用于监听指定感兴趣的事件。最后还是用一张图来总结整个流程作者其他文章:Prometheus 系列文章Prometheus 的介绍和安装。

分享技术干货和灵感、推荐新书和好玩的项目、分享Java面试题 8816

Springboot事件监听

Springboot事件监听

一名编程小白的Java学习日志 3303

SpringBoot 事件发布监听机制使用、分析、注意点 (一篇到位)

事件发布监听机制使用、分析、注意点

默默不代表沉默 1万+

【Java】SpringBoot实现事件监听(异步执行)

SpringBoot实现事件监听(异步执行)-源码测试

m0_64210833的博客 6265

(一)SpringBoot事件发布与监听

(一)SpringBoot事件发布与监听

专搞技术的小兔子 350

[南大ICS-PA2] 字符串处理函数和printf实现

[南大ICS-PA2] 程序、运行时环境与AM 字符串处理函数和printf实现

qq_42474104的博客 2985

Spring Boot 事件监听机制深度解析

Spring Boot 事件监听机制基于 Spring 框架的事件发布/订阅模型。在这个模型中,事件源(即事件的发布者)会在特定事件发生时发布一个事件对象,而监听器(即事件的订阅者)则会接收到这个事件对象并执行相应的操作。Spring Boot 提供了一套完整的 API 来实现这个模型,包括类、接口以及注解等。通过以上介绍,我们可以发现 Spring Boot 中的事件监听机制非常简单易用。我们只需要创建一个事件类、一个事件监听器以及在适当的地方发布事件即可。

weixin_52721608的博客 2190

电力电子技术文章:ACOT控制模式在Buck变换器中的频率稳定性分析

本文深入分析了ACOT控制模式在Buck变换器中实现频率稳定性的原理与优势。通过对比传统COT模式,阐述了ACOT如何通过自适应调整导通时间,将开关频率锁定在设定值,从而有效应对输入电压与负载变化。文章还探讨了其在轻载DCM模式下的高效与平滑切换特性,并提供了关键的设计考量与实战指南。

cc789的博客 1149

Spring Boot事件监听机制

当某件事情发生时,通知对此感兴趣的各方进行响应。报纸订阅:有新报纸时,报社会通知所有订阅者交通信号:红灯亮起时,车辆和行人会做出相应反应手机通知:收到消息时,手机会发出提示音在软件开发中,这种模式被称为观察者模式(Observer Pattern),也称为发布-订阅模式。事件触发时机ApplicationContext初始化或刷新完成时ApplicationContext启动时(调用start()方法)ApplicationContext停止时(调用stop()方法)

A1234543211232的博客 772

学习利用ce修改游戏生命参数

易语言代码 游戏的简陋界面 用ce查找存储这个1000即生命值的内存地址(得先附加到目标程序上,点击左上角那个电脑按钮) 看到有很多值为1000的,但哪个是生命值呢?真相只有一个 我们点击一下打我这个按钮,看下面的ce界面上地址为004A65C0处的值变了,所以这个就是我们要找的生命值 接下来我们对生命值进行修改,修改为99

zsd747289639的博客 5万+

基于多智能体架构的AI模拟法庭系统:律师案件预演的革命性工具

多智能体系统(Multi-Agent System)是人工智能领域的重要分支,它通过多个自主或半自主的智能体协同工作,模拟复杂的社会交互与决策过程。其核心原理在于分布式问题求解,每个智能体具备感知、推理和行动能力,通过通信与协作实现整体目标。在工程实践中,多智能体架构的价值在于能够模拟真实世界中的信息不对称与策略独立性,从而在复杂决策场景中提供更贴近现实的推演。这一技术正被应用于法律科技领域,通过构建物理隔离的智能体环境,模拟法庭对抗中的信息屏障与策略博弈。例如,在AI模拟法庭系统中,原告、被告、法官等角色

weixin_42561249的博客 393

Spring Boot 事件监听机制工作原理

总结:Spring Boot 事件监听机制工作原理其实和 Spring 的事件监听机制原理一样,Spring Boot 只是通过自动配置简化了一些复杂的配置而已,如果我们熟读 Spring 的源码,那对 Spring Boot 的源码解读是有极大帮助的,Spring Boot 很多功能都是基于 Spring 的,最后本篇关于 Spring Boot 事件监听机制工作原理的分享,希望可以帮助到需要的小伙伴。事件监听器需要注册到事件发布器中,那事件监听器是设么时候注册的?如有不正确的地方请各位指出纠正。

weixin_42118323的博客 2056

跨应用服务器的自定义 IDoc 传输实战:以 CATSDB 工时为例,打通两套 SAP 系统的数据通道

本文介绍了在企业多SAP系统环境下,使用SAP ALE/IDoc技术实现工时数据跨系统传输的解决方案。文章从技术选型、系统架构到具体配置步骤进行了详细说明,重点阐述了IDoc/ALE在异步传输、全链路追踪和数据重放方面的优势。 文章详细讲解了端到端实施流程,包括Logical System配置、RFC Destination创建、Message Type定义、Segment和Basic Type设计等关键步骤。同时提供了出站封装的ABAP代码示例,强调调用MASTER_IDOC_DISTRIBUTE函数后执

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 172

在Spring中使用监听器以及事件监听机制

在Spring中使用监听器以及事件监听机制

进击的豌豆的博客 1582

全局–局部傅里叶神经算子(GL-FNO):原理、严格推导与 PINN 混合策略

本文提出了一种全局-局部傅里叶神经算子(GL-FNO)及其与物理信息神经网络(PINN)的结合方法。主要内容包括: 架构设计:GL-FNO包含两个分支 - 全局分支处理低频结构,使用下采样输入;局部分支处理高频细节,使用全分辨率输入。两分支通过自适应门控机制融合。 理论分析:证明了GL-FNO在"低频全局+高频局部"任务上的优势,给出了误差分解和复杂度分析,并推导了与PINN结合时的渐进一致性条件。 实现方法:采用频谱微分计算物理残差,推导了完整的训练流程,包括数据损失与物理损失的联合优

VectorShift的博客 1330

波浪补偿控制(AHC)之波浪发生器(CODESYS完整源代码)

波浪发生器平台详细算法和结构介绍请参看下面博客文章:CODESYS平台如何建立FC和FB,请参看下面博客文章:

RXXW_Dor的博客 401

Spring Boot事件机制详解

事件驱动架构(Event-Driven Architecture, EDA)是一种软件设计模式,其中系统组件通过事件的发布与订阅进行通信。在Spring Boot中,事件机制为应用程序提供了松耦合的组件间通信方式,使得发布者无需关心谁在监听,监听者也无需了解事件来源

AWen_Jack的博客 1874

17 指挥AI写Mamba相关模型代码,快速适配大模型场景

本文为《30天掌控AI编程:从指令到落地,手把手教你指挥AI写代码》系列第十七篇,属于第三阶段多场景实战核心内容。本篇聚焦当下大模型领域热门的**Mamba架构**,针对零基础大模型开发、无深度学习基础的使用者,拆解指挥AI生成Mamba基础模型、微调适配、推理部署代码的核心方法,覆盖Mamba基础模块搭建、简易序列建模、小样本微调、本地推理等高频场景,提供可直接复用的高质量指令模板、完整可运行代码、环境配置与避坑指南,无需精通Transformer、状态空间模型等底层原理,轻松上手Mamba大模型开发。

coreopt的博客 61

Spring Boot 机制三: ApplicationContext 生命周期与事件机制源码解析

Component@OverrideSystem.out.println("收到事件: " + event.getMessage());事件触发阶段用途SpringApplication.run() 开始日志/监控Environment 初始化完成自定义属性处理ApplicationContext 创建完成注册 Beanrefresh 前容器准备完成refresh 后Bean 已初始化应用完全启动启动后逻辑启动失败异常处理。

Java、Python、AI、前沿技术等领域的技术总结和经验分享。 5593

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Spring Boot 事件监听机制实战【自定义 Spring Boot 事件监听】

事件监听器实现了 ApplicationLister 接口,泛型为 ApplicationEvent,因为要监听事件,所以必须按照 Spring 的规则来,onApplicationEvent 方法就是监听到的事件,在这里可以完成业务逻辑处理,因为事件监听器需要加入Spring IOC 容器中才能生效,因此 MyListener 使用了 @Component 注解。上一篇我们分析了 Spring Boot 事件监听的原理,本篇我们来自定义实现自己的监听器。欢迎提出建议及对错误的地方指出纠正。

weixin_42118323的博客 847

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Spring Boot 事件监听机制详解:ApplicationListener 的原理与实践

本文详细解析了Spring Boot中的事件监听机制,重点介绍了ApplicationListener接口的演进过程,从基础接口到增强型SmartApplicationListener和GenericApplicationListener。深入剖析了Spring Boot内置的核心监听器,如配置文件加载、日志系统初始化和字符编码校验等关键功能。通过自定义事件监听器的代码示例,展示了如何实现应用启动后的健康检查通知。最后针对常见问题提供了排查方案,帮助开发者更好地理解和应用这一重要机制。

刘一说的IT专栏 571

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Spring Boot 事件机制详解

Spring Boot 事件机制详解

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 7252

Spring Boot事件监听

1.Spring的事件是为Bena和Bean之间的消息通信提供支持,当一个Bean处理完成一个任务之后,会通知另一个Bean并让其进行相应的后续处理,这时候需要让里一个Bean监听当前Bean所发送的一个事件。 Spring Boot中定义事件的流程如下图: 事件监听器的作用是指定要监听哪一个事件。 import org.springframework.context.ApplicationEvent; /** * 定义事件 * @author Administrator * */ public

qq_40091033的博客 379

springboot listeners 事件监听机制 @EventListener详解

本人博客原地址:springboot listeners 事件监听机制 @EventListener详解 创作时间: 2019.06.11 16:53:43 基于springboot2.1.4 springboot在刚启动的时候构造SpringApplication对象就会加载一系列已配置的listeners(详细介绍),此处的listeners实现的是org.springframework.context.ApplicationListener接口,准确来说是org.springframework.con

qq_22351805的博客 5708
上一篇: RestClient:Spring Web 同步 HTTP 客户端权威说明文档
下一篇: Spring Boot 事件机制四大核心应用场景实践指南
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值