【问题】实现ApplicationListener接口和实现SmartApplicationListener 接口?
实现ApplicationListener接口针对单一事件监听
实现SmartApplicationListener 接口针对多种事件监听
其它注意:
Order值越小越优先执行
使用application.properties中定义的优于其它方式
【问题】如何自定义监听器?
一、实现方式1
1、创建监听器类FirstListener.java
1 2 3 4 5 6 7 8 9 | @Order ( 1 ) public class FirstListener implements ApplicationListener<ApplicationStartedEvent> { @Override public void onApplicationEvent(ApplicationStartedEvent event) { System.out.println( "hello, first listener" ); } } |
2、在spring.factories文件中增加配置监听器
org.springframework.context.ApplicationListener=com.example.demo.listener.FirstListener
3、运行查看效果
二、实现方式2
1、创建监听器类
1 2 3 4 5 6 7 8 9 | @Order ( 2 ) public class SecondListener implements ApplicationListener<ApplicationStartedEvent> { @Override public void onApplicationEvent(ApplicationStartedEvent event) { System.out.println( "hello, second listener" ); } } |
2、实例化SpringApplication,然后增加监听器
1 2 3 4 5 6 7 8 9 10 11 12 | @SpringBootApplication @MapperScan ( "com.example.demo.mapper" ) public class Sb2Application { public static void main(String[] args) { SpringApplication springApplication = new SpringApplication(Sb2Application. class ); springApplication.addListeners( new SecondListener()); springApplication.run(args); } } |
3、运行
三、实现方式3
1、创建监听器类
1 2 3 4 5 6 7 8 9 | @Order ( 3 ) public class ThirdListener implements ApplicationListener<ApplicationStartedEvent> { @Override public void onApplicationEvent(ApplicationStartedEvent event) { System.out.println( "hello, third listener" ); } } |
2、在application.propeties 文件中配置如下
3、运行
第三个监听器Order为3,但是却最早打印出来。原理类似于初始化器。DelegatingApplicationListener类里定义的Order为0
四、实现方式4
1、创建监听器类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @Order ( 4 ) public class FourthListener implements SmartApplicationListener { @Override public boolean supportsEventType(Class<? extends ApplicationEvent> eventType) { return ApplicationStartedEvent. class .isAssignableFrom(eventType) || ApplicationPreparedEvent. class .isAssignableFrom(eventType); } @Override public void onApplicationEvent(ApplicationEvent event) { System.out.println( "hello fourth listener" ); } } |
设置感兴趣的事件为ApplicationStartedEvent和ApplicationPreparedEvent
2、以追加的方式在application.properties配置
3、运行
可以发现打印了两次,因为它对ApplicationStartedEvent和ApplicationPreparedEvent两种事件感兴趣。
作者:Work Hard Work Smart
出处:http://www.cnblogs.com/linlf03/
欢迎任何形式的转载,未经作者同意,请保留此段声明!
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
2019-02-19 服务跟踪sleuth和可视化跟踪工具Zipkin
2019-02-19 Feign整合Hystrix