自定义事件
class ChangeStatusChangedEvent(source: Any,val msg: String) : ApplicationEvent(source)
`
发布事件
override val eventPublisher: ApplicationEventPublisher,
eventPublisher.publishEvent(ChangeStatusChangedEvent(this, "msg"))
事件监听
@EventListener(value = [ChangeStatusChangedEvent::class])
fun onChangeProcessedEvent(event: ChangeStatusChangedEvent) {
}
Spring自带事件
@Async
@EventListener(ContextRefreshedEvent::class)
fun onApplicationEvent() {
logger.forInfo { "开始预加载wbs信息" }
logger.forInfo { "预加载wbs信息结束" }
}
SpringBoot事件
应用程序运行时,应按以下顺序发送应用程序事件:
1. 除了注册侦听器和初始化程序之外,在运行开始时但在任何处理之前发送ApplicationStartingEvent。
2. 当在上下文中使用的Environment已知但在创建上下文之前,将发送ApplicationEnvironmentPreparedEvent。
3. 在刷新开始之前但在加载bean定义之后发送ApplicationPreparedEvent。
4. 在刷新上下文之后但在调用任何应用程序和命令行运行程序之前发送ApplicationStartedEvent。
5. 在调用任何应用程序和命令行运行程序后发送ApplicationReadyEvent。它表示应用程序已准备好为请求提供服务。
6. 如果启动时发生异常,则会发送ApplicationFailedEvent。
某些事件实际上是在创建ApplicationContext之前触发的,因此您无法在@Bean上注册侦听器。您可以使用SpringApplication.addListeners(…)方法或SpringApplicationBuilder.listeners(…)方法注册它们。
如果您希望自动注册这些侦听器,无论应用程序的创建方式如何,您都可以将META-INF/spring.factories文件添加到项目中并使用org.springframework.context.ApplicationListener键引用您的侦听器,如下所示:以下示例:
org.springframework.context.ApplicationListener=com.example.project.MyListener