【Spring】ApplicationListener 的介绍与使用

文章目录

  • 介绍
  • 内置事件
      • ContextRefreshedEven【当 ApplicationContext 被初始化或刷新时触发】
      • ContextStartedEvent【当 ApplicationContext 启动时触发】
      • ContextStoppedEvent【当 ApplicationContext 停止时触发】
      • ContextClosedEvent【当 ApplicationContext 关闭时触发】
  • 自定义事件

介绍

ApplicationListener 是监听 ApplicationContext 发出的事件响应,这是 Spring 提供的事件驱动机制。
ApplicationListener 有内置事件和自定义事件两种。内置事件主要是围绕 ApplicationContext 生命周期触发的,而自定义事件相当于是我们自己定义的事件。


内置事件

内置事件是在 ApplicationContext 初始化和生命周期过程中被触发,与 ApplicationListener 配合的是 ApplicationContextEvent,ApplicationContextEvent 分为以下几种:


ContextRefreshedEven【当 ApplicationContext 被初始化或刷新时触发】

当 ApplicationContext 被初始化或刷新时触发,这里的初始化是指 ApplicationContext 已经装配完成,所有的 Bean 都已经被实例化。而刷新是指在 ConfigurableApplicationContext 接口中使用 refresh()。ContextRefreshedEvent 事件通常在整个应用启动时触发一次。

代码如下:

@Component
public class ContextRefreshedEventApplicationListener implements ApplicationListener<ContextRefreshedEvent> {
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        // 在ApplicationContext刷新完成后执行自定义操作
    }
}

ContextStartedEvent【当 ApplicationContext 启动时触发】

当 ApplicationContext 启动时触发,也可以手动使用 ConfigurableApplicationContext 接口调用 start 方法执行。

代码如下:

@Component
public class ContextStartedEventApplicationListener implements ApplicationListener<ContextStartedEvent> {
    @Override
    public void onApplicationEvent(ContextStartedEvent event) {
        // 在ApplicationContext启动时执行自定义操作
    }
}

ContextStoppedEvent【当 ApplicationContext 停止时触发】

当 ApplicationContext 停止时触发,也可以手动使用 ConfigurableApplicationContext 接口调用 stop 方法执行。

代码如下:

@Component
public class ContextStoppedEventApplicationListener implements ApplicationListener<ContextStoppedEvent> {
    @Override
    public void onApplicationEvent(ContextStoppedEvent event) {
        // 在ApplicationContext停止时执行自定义操作
    }
}

ContextClosedEvent【当 ApplicationContext 关闭时触发】

当 ApplicationContext 关闭时触发,也可以手动使用 ConfigurableApplicationContext 接口调用 close 方法执行。

代码如下:

@Component
public class ContextClosedEventApplicationListener implements ApplicationListener<ContextClosedEvent> {
    @Override
    public void onApplicationEvent(ContextClosedEvent event) {
        // 在ApplicationContext关闭时执行自定义操作
    }
}


自定义事件

创建一个 Event 事件类,继承 ApplicationEvent

@Setter
@Getter
public class StudentEvent extends ApplicationEvent {
    private String name;
    private int age;
    private int phone;

    public StudentEvent(ApplicationContext source) {
        super(source);
    }
}

创建接收事件类

@Component
public class StudentListener implements ApplicationListener<StudentEvent> {
    @Override
    public void onApplicationEvent(StudentEvent event) {

    }
}

创建发布事件

@Component
public class StudentListener implements ApplicationListener<StudentEvent> {
    @Override
    public void onApplicationEvent(StudentEvent event) {

    }
}




End


你可能感兴趣的:(Spring,spring,java,spring,boot)