• 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
  • 相关阅读:
    集合的使用
    webpack打包vue文件+gulp打包sass文件
    业务总结思考 | 额度授信模型/拒绝捞回模型/定义坏样本
    使用WSL2技术在Windows子系统中安装Ubuntu并安装docker及docker-compose(图文详细教程)
    Oracle CPU使用率过高问题处理
    DbGate 开源、免费的 、智能的、NoSQL &SQL 数据库工具
    和数链BaaS化服务体系赋能企业数字经济升级发展
    jmeter调试错误大全
    图解Base64
    【力扣】55. 跳跃游戏 <贪心>
  • 原文地址:https://blog.csdn.net/weixin_42594143/article/details/133749218