• Spring ApplicationListener监听器用法


    ApplicationListener

    ApplicationListener是Spring框架中的一个接口,用于监听Spring应用程序中的事件。当应用程序中发生事件时,ApplicationListener会自动触发相应的回调方法,从而实现对事件的处理。


    在Spring Boot中,常见的事件包括:

    Spring Boot中,有许多常见的事件可以被监听。下面是一些常见的Spring Boot事件:
    
    1. ApplicationStartedEvent:在Spring Boot应用程序启动开始时触发,此时环境已经准备好,但是上下文还没有创建。
    
    2. ApplicationEnvironmentPreparedEvent:在Spring Boot应用程序环境准备好之后触发,此时上下文还没有创建。
    
    3. ApplicationPreparedEvent:在Spring Boot应用程序上下文创建之前触发,此时所有的bean定义已经加载完成,但是还没有实例化bean。
    
    4. ApplicationReadyEvent:在Spring Boot应用程序启动完成后触发,此时所有的bean已经初始化完成,应用程序已经可以响应请求。
    
    5. ApplicationFailedEvent:在Spring Boot应用程序启动过程中发生异常时触发,此时应用程序启动失败。
    6. ContextClosedEvent:spring容器的关闭事件
    
    除了上述事件,还有许多其他的事件可以监听,例如WebServerInitializedEventWeb服务器初始化完成时触发)、ContextRefreshedEvent(应用程序上下文刷新时触发)等。
    
    通过实现ApplicationListener接口,并重写onApplicationEvent方法,可以自定义监听器来处理这些事件。在Spring Boot中,可以通过在监听器类上添加@Component注解或实现ApplicationContextAware接口来注册监听器
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    ApplicationReadyEvent常用的方法:

    1. getSource():获取触发事件的对象,通常是Spring Boot应用程序的ApplicationContext2. getApplicationContext():获取应用程序的ApplicationContext对象。
    
    3. getSpringApplication():获取SpringApplication对象,可以用于访问应用程序的配置和属性。
    
    4. getArgs():获取应用程序的启动参数。
    
    5. getEmbeddedServletContainer():获取嵌入式的Servlet容器对象,可以用于访问和配置Servlet容器的属性。
    
    6. getEmbeddedWebApplicationContext():获取嵌入式Web应用程序的ApplicationContext对象。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    这些方法可以帮助在应用程序启动完成后执行一些特定的操作,例如初始化一些资源、加载配置文件等。

    使用步骤

    1. 创建一个实现 ApplicationListener 接口的监听器类。
    2. 在监听器类中实现 onApplicationEvent 方法,该方法将在应用程序中发生事件时被触发。
    3. 在 Spring Boot 应用程序中注册监听器。

    示例代码

    示例1

    @Component
    public class MyApplicationListener implements ApplicationListener<ApplicationEvent> {
    
        @Override
        public void onApplicationEvent(ApplicationEvent event) {
            if (event instanceof ApplicationStartedEvent) {
                // 应用程序启动事件
                System.out.println("Application started.");
            } else if (event instanceof ApplicationStoppedEvent) {
                // 应用程序关闭事件
                System.out.println("Application stopped.");
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    示例2

    import org.springframework.context.ApplicationEvent;
    import org.springframework.context.ApplicationListener;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MyApplicationListener implements ApplicationListener<ApplicationReadyEvent> {
    
        @Override
        public void onApplicationEvent(ApplicationReadyEvent event) {
            // 在这里编写事件处理逻辑
            System.out.println("收到事件:" + event.getClass().getSimpleName());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    示例3:使用注解的方式

    
    @Component
    public class MyApplicationListener {
    
        @EventListener
        public void onApplicationEventApplicationReadyEvent event) {
            // 在这里编写事件处理逻辑
            System.out.println("收到事件:" + event.getClass().getSimpleName());
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    一台服务器成了哆啦A梦的神奇口袋
    如何完成网课答案公众号搭建?小白教程!内附网课题库接口!
    软件工程理论与实践 (吕云翔) 第三章 可行性研究及需求分析课后习题及答案
    Sonar: static 修饰符顺序违法了JLS建议
    java计算机毕业设计计算机组成原理教学演示软件源码+数据库+系统+lw文档+mybatis+运行部署
    git学习笔记之用命令行解决冲突
    如何使用 PHP 和 MySQL 创建分页
    nginx搭建域名访问环境(反向代理配置)(练习用)
    前端,CSS,背景颜色跟随轮播图片改变而改变(附源码)
    Windows右键添加用 IDEA 打开
  • 原文地址:https://blog.csdn.net/weixin_42594143/article/details/133749218