SpringBoot的事件及其使用ApplicationEvent使用SpringBoot自定义事件

SpringBoot的事件及其使用

一、Spring Boot 中常见的事件

ApplicationStartEvent

ApplicationStartedEvent:当 Spring Boot 应用程序启动时,发布该事件。这个事件表示应用程序已经准备好接受请求,但在处理请求之前可能还需要一些初始化操作。

ApplicationReadyEvent

ApplicationReadyEvent:当 Spring Boot 应用程序准备就绪时,发布该事件。这个事件表示应用程序已经启动并且已经准备好接受请求,可以处理用户请求了。

ApplicationFailedEvent

ApplicationFailedEvent:当 Spring Boot 应用程序启动失败时,发布该事件。这个事件表示应用程序启动过程中出现了严重错误,导致应用程序无法正常启动。

ApplicationEnvironmentPreparedEvent

ApplicationEnvironmentPreparedEvent:当 Spring Boot 应用程序的环境准备完成时,发布该事件。这个事件表示应用程序的配置环境已经准备好,但尚未加载应用程序的 bean。

ApplicationPreparedEvent

ApplicationPreparedEvent:当 Spring Boot 应用程序准备完成时,发布该事件。这个事件表示应用程序的配置和 bean 已经加载完成,但尚未启动。

ApplicationStoppedEvent

ApplicationStoppedEvent:当 Spring Boot 应用程序停止时,发布该事件。这个事件表示应用程序已经关闭,并且不再接受新的请求。

用户自定义事件

除了上述的核心事件外,Spring Boot 还允许用户自定义事件,并在适当的时候发布这些事件。通过实现 ApplicationEvent 接口或其子类,可以创建自定义的事件,并在适当的时候使用 ApplicationEventPublisher 发布这些事件。

二、用户自定义事件实际应用

创建自定义事件

public class MyEvent extends ApplicationEvent {

   
    public MyEvent(Object source) {
        super(source);
    }
 		//其他构造函数及其方法
}

初始化自定义事件,这里我选择的是在SpringBoot准备就绪之后初始化我创建的自定义事件

@RequiredArgsConstructor
public class ApplicationContentPostProcessor implements ApplicationListener<ApplicationReadyEvent>{
	private final ApplicationContext applicationContext;
	
	/**
	 * 执行标识,确保Spring事件 {@link ApplicationReadyEvent} 有且执行一次
	 */
	private final AtomicBoolean executeOnlyOnce = new AtomicBoolean(false);

	@Override
	public void onApplicationEvent(ApplicationReadyEvent event) {
 	   if (!executeOnlyOnce.compareAndSet(false, true)) {
 	       return;
 	   }
 	   applicationContext.publishEvent(new MyEvent(this));
	}
}

创建监听器监听自定义事件

public class MyListener implements ApplicationListener<MyEvent> {
    @Override
    public void onApplicationEvent(MyEvent event) {
        //监听到之后的操作
    }
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值