springboot源码分析-监听器实现原理(下)
Posted 猿起缘灭
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot源码分析-监听器实现原理(下)相关的知识,希望对你有一定的参考价值。
本文承接上文:springboot源码分析(五)-监听器实现原理(中)
概述
上一篇文章已经把springboot中的监听器从源码的角度分析了一遍,有兴趣的可以去看一下,如果不想看源码,只是看一下如何自定义监听器,也可以一下这篇文章,这篇文章主要介绍一下自定义监听器的方法,以及如何让自定义的监听器生效,初次之外呢,还会介绍一下springboot在启动过程中都有哪些事件,执行的顺序是什么。
自定义监听器
通过实现ApplicationListener自定义监听器
@Order(1) public class FirstApplicationListener implements ApplicationListener<ApplicationStartedEvent> { @Override public void onApplicationEvent(ApplicationStartedEvent applicationStartedEvent) { System.out.println("first, springboot start"); } }
这是第一个监听器,我们实现了ApplicationListener接口,并且在接口中我们指定了ApplicationStartedEvent作为我们感兴趣的事件,当springboot启动是,调用到 listeners.starting(); 的时候,就会被我们自定义的监听器监听到,会执行我们重写的onApplicationEvent方法。
我们还是老规矩,在resource目录下新建META-INF目录,之后在这个目录下新建spring.factories文件,在文件中加入如下配置项
org.springframework.context.ApplicationListener=com.example.demo.listener.FirstApplicationListener
等号后面是我们自定义的监听器的路径,大家根据自己的路径填写。
ok我们启动springboot项目,可以看到如下打印结果:
. ____ _ __ _ _ /\\\\ / ___\'_ __ _ _(_)_ __ __ _ \\ \\ \\ \\ ( ( )\\___ | \'_ | \'_| | \'_ \\/ _` | \\ \\ \\ \\ \\\\/ ___)| |_)| | | | | || (_| | ) ) ) ) \' |____| .__|_| |_|_| |_\\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.2.6.RELEASE) firstApplicationContextInitializer is start thirdApplicationContextInitializer is start secondApplicationContextInitializer is start 2020-06-04 19:58:56.194 INFO 56577 --- [ main] com.example.demo.DemoApplication : Starting DemoApplication on ganxinledeMacBook-Pro.local with PID 56577 (/Users/ganxinle/workspace/demo/target/classes started by ganxinle in /Users/ganxinle/workspace/demo) 2020-06-04 19:58:56.197 INFO 56577 --- [ main] com.example.demo.DemoApplication : No active profile set, falling back to default profiles: default 2020-06-04 19:58:56.920 INFO 56577 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2020-06-04 19:58:56.929 INFO 56577 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2020-06-04 19:58:56.930 INFO 56577 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.33] 2020-06-04 19:58:56.987 INFO 56577 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2020-06-04 19:58:56.987 INFO 56577 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 752 ms 2020-06-04 19:58:57.115 INFO 56577 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService \'applicationTaskExecutor\' 2020-06-04 19:58:57.243 INFO 56577 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path \'\' 2020-06-04 19:58:57.246 INFO 56577 --- [ main] com.example.demo.DemoApplication : Started DemoApplication in 1.328 seconds (JVM running for 1.662) first, springboot start
说明我们的配置成功了,但是有的小伙伴可能有疑问,为什么是最后打印的,这个有兴趣的小伙伴自己去探究,我没有深究
以上是关于springboot源码分析-监听器实现原理(下)的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot内置生命周期事件详解 SpringBoot源码(十)
SpringBoot内置生命周期事件详解 SpringBoot源码
SpringBoot内置生命周期事件详解 SpringBoot源码