文章目录
介绍
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) {
}
}