"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