SpringBoot监听器执行顺序

"D:\Program Files\Java\jdk1.8.0_281\bin\java.exe" -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:64372,suspend=y,server=n -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -javaagent:C:\Users\wxzz\AppData\Local\JetBrains\IntelliJIdea2021.1\captureAgent\debugger-agent.jar -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -Dfile.encoding=UTF-8 -classpath "D:\Program Files\Java\jdk1.8.0_281\jre\lib\charsets.jar;D:\Program Files\Java\jdk1.8.0_281\jre\lib\deploy.jar;D:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\access-bridge-64.jar;D:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\cldrdata.jar;D:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\dnsns.jar;D:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\jaccess.jar;D:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\jfxrt.jar;D:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\localedata.jar;D:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\nashorn.jar;D:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\sunec.jar;D:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\sunjce_provider.jar;D:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\sunmscapi.jar;D:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\sunpkcs11.jar;D:\Program Files\Java\jdk1.8.0_281\jre\lib\ext\zipfs.jar;D:\Program Files\Java\jdk1.8.0_281\jre\lib\javaws.jar;D:\Program Files\Java\jdk1.8.0_281\jre\lib\jce.jar;D:\Program Files\Java\jdk1.8.0_281\jre\lib\jfr.jar;D:\Program Files\Java\jdk1.8.0_281\jre\lib\jfxswt.jar;D:\Program Files\Java\jdk1.8.0_281\jre\lib\jsse.jar;D:\Program Files\Java\jdk1.8.0_281\jre\lib\management-agent.jar;D:\Program Files\Java\jdk1.8.0_281\jre\lib\plugin.jar;D:\Program Files\Java\jdk1.8.0_281\jre\lib\resources.jar;D:\Program Files\Java\jdk1.8.0_281\jre\lib\rt.jar;D:\aa\ThankYouMyy\springbootlearn\springboot-listener\target\classes;C:\Users\wxzz\.m2\repository\org\springframework\boot\spring-boot-starter\2.6.13\spring-boot-starter-2.6.13.jar;C:\Users\wxzz\.m2\repository\org\springframework\boot\spring-boot\2.6.13\spring-boot-2.6.13.jar;C:\Users\wxzz\.m2\repository\org\springframework\spring-context\5.3.23\spring-context-5.3.23.jar;C:\Users\wxzz\.m2\repository\org\springframework\spring-aop\5.3.23\spring-aop-5.3.23.jar;C:\Users\wxzz\.m2\repository\org\springframework\spring-beans\5.3.23\spring-beans-5.3.23.jar;C:\Users\wxzz\.m2\repository\org\springframework\spring-expression\5.3.23\spring-expression-5.3.23.jar;C:\Users\wxzz\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.6.13\spring-boot-autoconfigure-2.6.13.jar;C:\Users\wxzz\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.6.13\spring-boot-starter-logging-2.6.13.jar;C:\Users\wxzz\.m2\repository\ch\qos\logback\logback-classic\1.2.11\logback-classic-1.2.11.jar;C:\Users\wxzz\.m2\repository\ch\qos\logback\logback-core\1.2.11\logback-core-1.2.11.jar;C:\Users\wxzz\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.17.2\log4j-to-slf4j-2.17.2.jar;C:\Users\wxzz\.m2\repository\org\apache\logging\log4j\log4j-api\2.17.2\log4j-api-2.17.2.jar;C:\Users\wxzz\.m2\repository\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;C:\Users\wxzz\.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\wxzz\.m2\repository\org\springframework\spring-core\5.3.23\spring-core-5.3.23.jar;C:\Users\wxzz\.m2\repository\org\springframework\spring-jcl\5.3.23\spring-jcl-5.3.23.jar;C:\Users\wxzz\.m2\repository\org\yaml\snakeyaml\1.29\snakeyaml-1.29.jar;C:\Users\wxzz\.m2\repository\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;D:\Program Files\JetBrains\IntelliJ IDEA 2021.1.3\lib\idea_rt.jar" com.example.springbootlistener.SpringbootListenerApplication
Connected to the target VM, address: '127.0.0.1:64372', transport: 'socket'
SpringApplicationRunListener.....starting
SpringApplicationRunListener.....environmentPrepared

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::               (v2.6.13)

ApplicationContextInitializer.....initialize
SpringApplicationRunListener.....contextPrepared
2023-04-27 11:30:57.377  INFO 4760 --- [           main] c.e.s.SpringbootListenerApplication      : Starting SpringbootListenerApplication using Java 1.8.0_281 on LAPTOP-QF244UBH with PID 4760 (D:\aa\ThankYouMyy\springbootlearn\springboot-listener\target\classes started by wxzz in D:\aa\ThankYouMyy\springbootlearn)
2023-04-27 11:30:57.382  INFO 4760 --- [           main] c.e.s.SpringbootListenerApplication      : No active profile set, falling back to 1 default profile: "default"
SpringApplicationRunListener.....contextLoaded
2023-04-27 11:30:57.908  INFO 4760 --- [           main] c.e.s.SpringbootListenerApplication      : Started SpringbootListenerApplication in 0.895 seconds (JVM running for 1.737)
SpringApplicationRunListener.....started
SpringApplicationRunListener.....started Duration
ApplicationRunner.......run
CommandLineRunner.....run
SpringApplicationRunListener.....running
SpringApplicationRunListener.....ready
Disconnected from the target VM, address: '127.0.0.1:64372', transport: 'socket'

SpringBoot 监听机制,其实是对Java提供的事件监听机制的封装
Java中的事件监听机制定义了以下几个角色
1.事件:Event, 继承java.util.EventObject类的对象
2.事件源:Source, 任意对象Object
3.监听器:Listener, 实现java.util.EventListener接口的对象

SpringBoot在项目启动时,会对几个监听器进行回调,我们可以实现这些监听器接口,在项目启动时完成一些操作。
ApplicationContextInitializer,
SpringApplicationRunListener,
CommandLineRunner,
ApplicationRunner

其中这两个ApplicationContextInitializer,
SpringApplicationRunListener需要在spring.factories中指定

# Run Listeners
org.springframework.boot.SpringApplicationRunListener=com.example.springbootlistener.listener.MyApplicationRunListener


# Application Context Initializers
org.springframework.context.ApplicationContextInitializer=com.example.springbootlistener.listener.MyApplicationContextInitializer

特别提醒:SpringApplicationRunListener的实现类要提供有参构造才能启动成功

public MyApplicationRunListener(SpringApplication application, String[] string){
}
image.png

以上内容参考 https://www.bilibili.com/video/BV1Lq4y1J77x?p=28&vd_source=4dfa4194fcc127a8b1f77b327d8bbd0c

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容