了解了 Spring Boot 启动过程中的各个事件及监听机制,大家可以依葫芦画瓢实现 Spring Boot 启动过程中的各个自定义操作,比如说在启动过程上实现动态注册、移除 Bean 等。 一般来说,不建议使用事件和监听器来实现比较耗时和繁重的任务,这样会影响应用程序的正常启动,考虑使用 Spring Boot 的application/ command-line r...
代码很简单,SpringBoot用SpringApplicationRunListeners类把所有启动监听器都管理启动,通过他发布对应事件,然后循环去调用对应启动监听器的事件,而SpringBoot默认只要一个org.springframework.boot.context.event.EventPublishingRunListener启动监听器,通过他可以做很多很多的事情,下面我们会一步一步分析。 EventPublishingRunList...
1.2. 在 META-INF/spring.factories 中配置 org.springframework.boot.SpringApplicationRunListener=自己的Listener,还可以指定一个有参构造器,接受两个参数(SpringApplication application, String[] args) /** * Listener先要从 META-INF/spring.factories 读到 * * 1、引导: 利用 BootstrapContext 引导整个项目...
7. ApplicationReadyEvent: application 和command-line 的runner都被调用后触发 8. AvailabilityChangeEvent 9. ApplicationFailedEvent: 启动失败触发 另外,会在 ApplicationPreparedEvent 之后和 ApplicationStartedEvent 之前发送 ContextRefreshedEvent 事件 二 项目启动后需要执行某个操作 1. 实现 ApplicationListener<E ext...
加载监听器 当我们启动一个SpringBoot程序,在执行SpringApplication.run()的时候,首先在初始化SpringApplication的过程中,加载了11个实现了ApplicationListener接口的拦截器。这11个自动加载的ApplicationListener,是在spring.factories中定义并通过SPI扩展被加载的:这里列出的10个是在spring-boot中加载的,还有剩余的1个是...
初始化全局的事件监听器EventPublishingRunListener,如图 第二步:接下来就是开始准备springboot所有配置文件存储的仓库Environment,这个其实也很好理解,spring是管理bean的,bean里面也有很多属性,所以优先收集整个上下文的配置属性信息,将其放在一个Environment里面,然后以后想要什么,就从环境里面去获取。
当SpringBoot成功获取到所有已配置的监听器之后是如何启动这些监听器的呢? 让我们一起进入starting()这个方法的源码中去,点击starting方法进入如下源码: starting方法就是循环的执行每一个监听器的方法,点击listener.starting()方法进入实现类EventPublishingRunListener的starting方法: ...
SpringBoot之事件监听 1.Spring Boot 启动事件顺序 1、ApplicationStartingEvent 这个事件在 Spring Boot 应用运行开始时,且进行任何处理之前发送。 2、ApplicationEnvironmentPreparedEvent 这个事件在当已知要在上下文中使用 Spring 环境(Environment)时,在 Spring 上下文(context)创建之前发送。
1、启动监听器 执行listeners.starting(bootstrapContext, this.mainApplicationClass); 启动监听器 跟进starting 方法,到了 SpringApplicationRunListeners 类的 starting 方法 void starting(ConfigurableBootstrapContext bootstrapContext, Class mainApplicationClass) { ...