work hard work smart

专注于Java后端开发。 不断总结,举一反三。
随笔 - 1158, 文章 - 0, 评论 - 153, 阅读 - 186万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

SpringBoot自定义监听器

Posted on   work hard work smart  阅读(3184)  评论(0编辑  收藏  举报

【问题】实现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两种事件感兴趣。

 

编辑推荐:
· 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
点击右上角即可分享
微信分享提示