spring中的事件

下表列出了Spring提供的标准事件:

Event

Explanation

ContextRefreshedEvent

在ApplicationContext被初始化或刷新时发布(例如,通过使用ConfigurableApplicationContext接口上的refresh()方法)。这里的“初始化”意味着加载了所有bean,检测并激活了后处理器bean,预实例化了单例,并且ApplicationContext对象已经准备好可以使用。只要上下文没有关闭,就可以多次触发刷新,前提是所选择的ApplicationContext实际上支持这种“热”刷新。

ContextStartedEvent

通过使用ConfigurableApplicationContext接口上的start()方法启动ApplicationContext时发布。在这里,“started”意味着所有生命周期bean都接收一个显式的开始信号。通常,该信号用于在显式停止之后重新启动bean,但也可以用于启动未配置为自动启动的组件(例如,在初始化时尚未启动的组件)。

ContextStoppedEvent

当通过使用ConfigurableApplicationContext接口上的stop()方法停止ApplicationContext时发布。在这里,“stopped”意味着所有生命周期bean都接收一个明确的停止信号。停止的上下文可以通过start()调用重新启动。

ContextClosedEvent

使用ConfigurableApplicationContext接口上的close()方法或通过JVM关闭挂钩关闭ApplicationContext时发布。在这里,“closed”意味着所有的单例bean都会被销毁。一旦上下文被关闭,它就会到达生命的终点,并且不能被刷新或重启。

RequestHandledEvent

一个特定于web的事件,告诉所有bean一个HTTP请求已经得到了服务。此事件在请求完成后发布。这个事件只适用于使用Spring的DispatcherServlet的web应用程序。

ServletRequestHandledEvent

RequestHandledEvent的一个子类,用于添加特定于servlet的上下文信息。

 

一,启动过程中的一些事件

 

在spring容器初始化前,会通过SpringApplicationRunListener触发ApplicationStartedEvent事件,在容器实例化完成后触发ApplicationReadyEvent事件。

SpringApplication 通过SpringFactoriesLoader从META-INF/spring.factories资源中加载其实现类EventPublishingRunListener。

启动事件(按先后顺序)

ApplicationStartingEvent

这个事件在 Spring Boot 应用运行开始时,且进行任何处理之前发送(除了监听器和初始化器注册之外)。

ApplicationEnvironmentPreparedEvent

这个事件在当已知要在上下文中使用 Spring 环境(Environment)时,在 Spring 上下文(context)创建之前发送。

ApplicationContextInitializedEvent

这个事件在当 Spring 应用上下文(ApplicationContext)准备好了,并且应用初始化器(ApplicationContextInitializers)已经被调用,在 bean 的定义(bean definitions)被加载之前发送。

ApplicationPreparedEvent

这个事件是在 Spring 上下文(context)刷新之前,且在 bean 的定义(bean definitions)被加载之后发送。

ApplicationStartedEvent

这个事件是在 Spring 上下文(context)刷新之后,且在 application/ command-line runners 被调用之前发送。

AvailabilityChangeEvent

这个事件紧随上个事件之后发送,状态:ReadinessState.CORRECT,表示应用已处于活动状态。

ApplicationReadyEvent

这个事件在任何 application/ command-line runners 调用之后发送。

AvailabilityChangeEvent

这个事件紧随上个事件之后发送,状态:ReadinessState.ACCEPTING_TRAFFIC,表示应用可以开始准备接收请求了。

ApplicationFailedEvent

这个事件在应用启动异常时进行发送。

上面所介绍的这些事件列表仅包括绑定到 SpringApplication 的 SpringApplicationEvents 事件,除了这些事件以外,以下事件也会在 ApplicationPreparedEvent 之后和 ApplicationStartedEvent 之前发送

WebServerInitializedEvent

这个 Web 服务器初始化事件在 WebServer 启动之后发送,对应的还有

ServletWebServerInitializedEvent

Servlet Web 服务器初始化事件

ReactiveWebServerInitializedEvent

响应式 Web 服务器初始化事件

ContextRefreshedEvent

这个上下文刷新事件是在 Spring 应用上下文(ApplicationContext)刷新之后发送。 

ClearCachesApplicationListener

用于在 application context 应用程序上下文加载之后清除启动过程中所使用的缓存,
 关注的事件是 ContextRefreshedEvent ,也就是说在该事件发生时相应的缓存清除动作会发生。
 会清除哪些缓存呢 ?

  1.  ReflectionUtils所使用的缓存;
  2.  所对应classLoader及其祖先classLoader所使用的缓存;
     

二,请求过程中的事件

ServletRequestHandledEvent

请求结束回调事件

三,其他

ParentContextCloserApplicationListener

在一个应用上下文的双亲应用上下文关闭时关闭该应用上下文。这个监听器监听应用上下文刷新事件并从中取出应用上下文,然后监听关闭事件在应用上下文的层级结构中往下层传播该事件。

ParentContextAvailableEvent

监听ParentContextAvailableEvent事件,当前的应用上线文有parent context时,向parent context中注册ContextCloserListener,当parent context关闭时通知子容器

FileEncodingApplicationListener

检测当前系统环境的file.encoding和spring.mandatory-file-encoding设置的值是否一样 ,不一样则抛出IllegalStateException异常 

AnsiOutputApplicationListener

监听ApplicationEnvironmentPreparedEvent事件,获取
 Environment 中的spring.output.ansi.enabled, 设置彩色输出会让日志更具可读性

ConfigFileApplicationListener

监听ApplicationEnvironmentPreparedEvent和ApplicationPreparedEvent事件,且ConfigFileApplicationListener也实现了EnvironmentPostProcessor接口,ApplicationEnvironmentPreparedEvent事件会加载外部化配置文件,如 application.yaml和application.perprotiess

ApplicationEnvironmentPreparedEvent

通过SpringFactoriesLoader.loadFactories加载EnvironmentPostProcessor

DelegatingApplicationListener

注册在environment中的配置的context.listener.classes监听器

ClasspathLoggingApplicationListener

日志级别为debug级别时,在环境准备完成事件ApplicationEnvironmentPreparedEvent或者应用失败事件ApplicationFailedEvent 发生时,输出线程上下文类加载器的classpath

LoggingApplicationListener

识别日志框架,并加载日志配置文件

LiquibaseServiceLocatorApplicationListener

监听ApplicationStartingEvent事件,取代liquibase ServiceLocator

BackgroundPreinitializer

监听ApplicationReadyEvent和ApplicationFailedEvent事件,异步线程触发早期的初始化操作

EventPublishingRunListener

在实例化EventPublishingRunListener的过程中,会给它最重要的属性initialMulticaster赋值,其类型是SimpleApplicationEventMulticaster。接着遍历 SpringApplication 初始化阶段的listeners监听器集合,将监听器存入其关联的ListenerRetriever#applicationListeners属

你可能感兴趣的:(spring)