五八同城招聘网找工作,保定seo建站,jsp网站开发实训报告,企业网站模板cms大家都知道#xff0c;在 Spring 框架中事件和监听无处不在#xff0c;打通了 Spring 框架的任督二脉#xff0c;事件和监听也是 Spring 框架必学的核心知识之一。一般来说#xff0c;我们很少会使用到应用程序事件#xff0c;但我们也不要忘了它们的存在#xff0c;比如…大家都知道在 Spring 框架中事件和监听无处不在打通了 Spring 框架的任督二脉事件和监听也是 Spring 框架必学的核心知识之一。一般来说我们很少会使用到应用程序事件但我们也不要忘了它们的存在比如说在 Spring 框架内部都使用了各种不同的事件来处理不同的任务。毫无疑问在 Spring Boot 框架中事件和监听也得到了发扬光大除了常用的 Spring Framework 事件(例如ContextRefreshedEvent)之外Spring Boot 在启动过程中还发送一系列其他的应用程序事件。Spring Boot 启动事件顺序1、ApplicationStartingEvent这个事件在 Spring Boot 应用运行开始时且进行任何处理之前发送(除了监听器和初始化器注册之外)。2、ApplicationEnvironmentPreparedEvent这个事件在当已知要在上下文中使用 Spring 环境(Environment)时在 Spring 上下文(context)创建之前发送。3、ApplicationContextInitializedEvent这个事件在当 Spring 应用上下文(ApplicationContext)准备好了并且应用初始化器(ApplicationContextInitializers)已经被调用在 bean 的定义(bean definitions)被加载之前发送。4、ApplicationPreparedEvent这个事件是在 Spring 上下文(context)刷新之前且在 bean 的定义(bean definitions)被加载之后发送。5、ApplicationStartedEvent这个事件是在 Spring 上下文(context)刷新之后且在 application/ command-line runners 被调用之前发送。6、AvailabilityChangeEvent这个事件紧随上个事件之后发送状态ReadinessState.CORRECT表示应用已处于活动状态。7、ApplicationReadyEvent8、AvailabilityChangeEvent这个事件紧随上个事件之后发送状态ReadinessState.ACCEPTING_TRAFFIC表示应用可以开始准备接收请求了。9、ApplicationFailedEvent这个事件在应用启动异常时进行发送。上面所介绍的这些事件列表仅包括绑定到 SpringApplication 的 SpringApplicationEvents 事件除了这些事件以外以下事件也会在 ApplicationPreparedEvent 之后和 ApplicationStartedEvent 之前发送WebServerInitializedEvent这个 Web 服务器初始化事件在 WebServer 启动之后发送对应的还有 ServletWebServerInitializedEvent(Servlet Web 服务器初始化事件)、ReactiveWebServerInitializedEvent(响应式 Web 服务器初始化事件)。ContextRefreshedEvent这个上下文刷新事件是在 Spring 应用上下文(ApplicationContext)刷新之后发送。自定义启动事件监听器既然我们知道了 Spring Boot 在启动过程中的各个事件那么我们就可以在每个环节来处理一些我们想做的事情只需要自定义一个监听器来监听某个事件就可以了。比如我们想在上面的第 8 步即应用启动完成可以接收请求了我们简单输出一个成功标识。Spring Boot 基础的构建这里就不介绍了如果你对 Spring Boot 还不是很熟悉或者只是会简单的使用那还是建议你深入学习下吧推荐这个 Spring Boot 学习仓库欢迎 Star 关注1、新建监听器import lombok.extern.slf4j.Slf4j;import org.springframework.boot.availability.AvailabilityChangeEvent;import org.springframework.boot.availability.ReadinessState;import org.springframework.context.ApplicationListener;/*** 来源微信公众号Java技术栈*/Slf4jpublic class JavastackListener implements ApplicationListener {Overridepublic void onApplicationEvent(AvailabilityChangeEvent event) {log.info(监听到事件 event);if (ReadinessState.ACCEPTING_TRAFFIC event.getState()){log.info(应用启动完成可以请求了……);}}}新建一个自定义监听器实现了 ApplicationListener 接口泛型 AvailabilityChangeEvent 表示仅仅监听 AvailabilityChangeEvent 事件。因第 8 步的事件和第 6 步的事件同名我们可以根据事件的状态来区分到底是哪一个环节的事件 。2、注册监听器注册监听器有两种方式1、在资源目录中的 META-INF/spring.factories 文件中自动注册org.springframework.context.ApplicationListener\cn.javastack.springboot.features.listener.JavastackListener2、如果是监听 Spring 应用上下文(ApplicationContext)创建之后的事件可以直接在监听器上使用 Component 注解即可否则需要使用第一种方法的自动注册因为 ApplicationContext 并未创建这时的 Bean 是不能被加载的。3、应用启动下面来看下启动日志可以看到同时输出了第 6 步和 8 步的监听日志但只输出第 8 步的启动完成日志自定义监听实现成功。总结了解了 Spring Boot 启动过程中的各个事件及监听机制大家可以依葫芦画瓢实现 Spring Boot 启动过程中的各个自定义操作比如说在启动过程上实现动态注册、移除 Bean 等。一般来说不建议使用事件和监听器来实现比较耗时和繁重的任务这样会影响应用程序的正常启动考虑使用 Spring Boot 的 application/ command-line runners 来进行实现。本文只是介绍了一下 Spring Boot 启动过程中的事件及如何实现自定义监听器怎么实现一个业务上的自定义事件和监听器不在本文范围之类后续栈长再开一篇关注公众号Java技术栈第一时间推送不要走开。本文实践所有源代码已上传参考资料最后觉得有收获在看、转发一下哦原创不易需要鼓励。版权申明本文系公众号 Java技术栈 原创原创实属不易转载、引用本文内容请注明出处禁止抄袭、洗稿请自重尊重他人劳动成果和知识产权。近期热文推荐觉得不错别忘了随手点赞转发哦