spring的高阶使用技巧1——ApplicationListener注册监听器的使用

Spring中的监听器,高阶开发工作者应该都耳熟能详。在 Spring 框架中,这个接口允许开发者注册监听器来监听应用程序中发布的事件。Spring的事件处理机制提供了一种观察者模式的实现,允许应用程序组件之间进行松耦合的通信。

更详细的介绍和使用说明可以参看如下相关文章:

ApplicationListener 注册监听器来监听应用程序中发布的事件_applicationlistener发布事件-CSDN博客

Spring监听器用法与原理详解(带ApplicationListener模型图)-CSDN博客

一.什么是ApplicationListener接口?

它是Spring框架中的一个接口,这个接口定义了一个处理应用程序事件的方法。当一个事件被发布时,所有注册了对应事件的ApplicationListener都会被通知,并调用其onApplicationEvent()方法来处理改事件。

这个接口通常用于实现自定义的事件监听器,以便在特定事件发生时执行相应的操作。例如,你可以创建一个监听器来监听 ContextRefreshedEvent,当 Spring 应用上下文刷新完成时执行一些初始化操作。

二.如何使用ApplicationListener接口?

1.方法一:实现ApplicationListener接口

注意:

  • 实现接口后需要重写onApplicationEvent方法
  • 该方法在应用程序上下文被刷新时触发
  • 需要将新增的监听器实例加入spring管理,以便在适当的时候触发监听
/*** Spring监听器应用实例*/
@Component
public class TestApplicationListener implements ApplicationListener<ContextRefreshedEvent> {@Overridepublic void onApplicationEvent(ContextRefreshedEvent event) {//可以写初始化相关或者跨组件通信等业务操作逻辑System.out.println("Spring监听器应用实例执行成功");}}
2.方法二:使用@EventListener注解

注意:

  • 在需要监听某个方法上,加上@EventListener(ContextRefreshedEvent.class)注解后,Spring会在加载当前类时,为其创建一个监听器,这个监听器监听的事件类型ContextRefreshedEvent,当此事件发生时,将触发对应的方法。
  • 同样也需要将其加入spring容器管理,以便在适当的时候触发监听
@Component
public class MyEventListener {@EventListener(ContextRefreshedEvent.class)public void methodEvent(ContextRefreshedEvent event){System.out.println("methodEvent执行完成");}
}

三.案例测试

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/833733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

英语笔记 1

Although the rich might look down upon the poor, it is important to remember that everyone deserves to be treated with respect.

中文文本特征提取之自动分词

关键词&#xff1a;在某一个类别的文章中&#xff0c;出现的次数很多&#xff0c;但是在其他类别的文章当中出现很少 from sklearn.feature_extraction.text import CountVectorizer import jiebadef chinese_text_extraction02():"""中文文本特征提取&#xf…

Python 正则表达式 (?=...) 和 (?<=...) 符号

Python 正则表达式 引言正文示例1示例2示例3示例4 引言 今天遇到了一个比较棘手的问题&#xff0c;于是终于打算要对正则表达式中的 (?...) 和 (?<...) 符号动手了。 正文 (?...) 表示当 … 匹配时&#xff0c;匹配成功&#xff0c;但不消耗字符串中的任何字符。这个…

【自用】春秋招实习笔试常见问题

数据结构常见问题 map 基本操作 储存键值对<key,pair>&#xff0c;自动按照key排序 #include<map> //新建 map<string,int> myMap; //插入 myMap[str1] 1; //查找 if(myMap.count(str1)0){cout<<"not found"<<endl;} //遍历 for (…

海外市场成 ISV 新掘金地?生成式 AI 如何加速业务创新实践?Zilliz 有话说

期望了解 Zilliz 最新动态&#xff1f;想要与 Zilliz 线下探讨 AI 时代向量数据库的全球化布局思考及典型实践&#xff1f; 机会来啦&#xff01;5 月 10 日&#xff0c;Zilliz 将闪现亚马逊云科技的两场活动现场&#xff08;苏州、西安&#xff09;&#xff0c;与大家共话行业…

Ubuntu将软件图标添加到应用列表

一.简介snap snap和yum&#xff0c;apt一样都是安装包工具&#xff0c;但是snap里的软件源是自动更新到最新版本&#xff0c;最好用 比如Ubuntu的软件商城就是使用的snap软件包 二. Ubuntu软件商城更新 1.ps -ef | grep snap-store 查询并kill snap-store的所有进程 2.sudo …

【仪酷LabVIEW AI工具包案例】使用LabVIEW AI工具包+YOLOv5结合Dobot机械臂实现智能垃圾分类

‍‍&#x1f3e1;博客主页&#xff1a; virobotics(仪酷智能)&#xff1a;LabVIEW深度学习、人工智能博主 &#x1f384;所属专栏&#xff1a;『仪酷LabVIEW AI工具包案例』 &#x1f4d1;上期文章&#xff1a;『【YOLOv9】实战二&#xff1a;手把手教你使用TensorRT实现YOLOv…

C++之STL-priority_queue和仿函数的讲解

目录 一、priority_queue的介绍和使用 1.1 priority_queue的介绍 1.2 priority_queue的基本接口 二、仿函数的介绍 2.1 基本概念 2.2 适用场景 三、模拟实现priority_queue 3.1 向上调整算法 3.2 向下调整算法 3.3 整体框架 一、priority_queue的介绍和使用 1.1 prio…

基于卷积神经网络的一维信号降噪(简单版,MATLAB)

简单演示一下基于卷积神经网络的一维信号降噪&#xff0c;有个大致印象即可。 %% Plot the previous training CNN. set_plot_defaults(on) load(denoiser_sparse.mat); h1{1} double(conv1); h1{2} double(conv2); h1{3} reshape(double(conv3),[8,1,17]); figure(1) [r,c…

Java_异常

介绍 编译时异常&#xff1a; 除RuntimeException和他的子类&#xff0c;其他都是编译时异常。编译阶段需要进行处理&#xff0c;作用在于提醒程序眼 运行时异常&#xff1a; RuntimeException本身和其所有子类&#xff0c;都是运行时异常。编译阶段不报错&#xff0c;是程序…

python之enumerate()函数使用总结

enumerate() 函数是一个内置函数&#xff0c;用于在迭代过程中同时获取元素的索引和值。它返回一个枚举对象&#xff0c;包含了索引和对应的元素。 1. enumerate() 函数的语法 如下&#xff1a; enumerate(iterable, start0) 参数说明&#xff1a; iterable&#xff1a;必需…

C++怎样产生随机数

C怎样产生随机数? 这里要用到的是 rand() 函数和 srand() 函数 rand() 会返回一随机数值, 范围在 0 至 RAND_MAX ,RAND_MAX 定义在 stdlib.h, 其值根据系统配置设定 例如&#xff1a; #include<stdio.h> #include<stdlib.h> int main() {for(int i0;i<10;i)…

Java17 --- SpringCloud之Nacos

目录 一、下载nacos并运行 1.1、创建9001微服务作为提供者 1.2、创建80微服务作为消费者 二、naocs配置中心规则与动态刷新 2.1、创建3377微服务 2.2、在nacos中创建配置文件 三、nacos数据模型之Namespace-Group-Datald 3.1、DatalD方案 3.2、Group方案 3.3、Name…

python软件开发遇到的坑-相对路径文件读写异常,不稳定

1. os.chdir()会影响那些使用相对路径读写文件的程序&#xff0c;使其变得不稳定&#xff0c;默认情况下&#xff0c;当前工作目录是主程序所在目录&#xff0c;使用os.chdir会将当前工作目录修改到其他路径。 资料&#xff1a; python相对路径写对了却报错是什么原因呢&#…

前端工程化之---git hooks

git hook 和 husky 1、git hook 让我们可以在 git 执行一些行为的前后时机&#xff0c;执行一些脚本。 2、比如 pre-commit &#xff0c;能够在我们真正提交 commit 之前先执行一段代码&#xff0c;如果这段代码报错&#xff08;exit 1&#xff09;&#xff0c;提交会被取消&…

蜜蜂收卡系统 加油卡充值卡礼品卡自定义回收系统源码 前后端开源uniapp可打包app

本文来自&#xff1a;蜜蜂收卡系统 加油卡充值卡礼品卡自定义回收系统源码 前后端开源uniapp可打包app - 源码1688 卡券绿色循环计划—— 一项旨在构建卡券价值再利用生态的社会责任感项目。在当前数字化消费日益普及的背景下&#xff0c;大量礼品卡、优惠券因各种原因未能有效…

mib browser读取mib文件的oid(飞塔防火墙为例)

在配置zabbix监控的时候,配置监控项最为麻烦,一般我们都会套用模板,这种方式比较简单,但是有些设备就是没有现成的zabbix模板,怎么办? 今天我们使用MIB Browser来获取设备SNMP的OID,然后加入zabbix 。 1.什么是MIB Browser SNMP客户端工具MIB Browser, 全名iReasonin…

ARP详解

2.4 ARP 如图2-10所示&#xff0c;当网络设备有数据要发送给另一台网络设备时&#xff0c;必须要知道对方的网络层地址&#xff08;即IP地址&#xff09;。IP地址由网络层来提供&#xff0c;但是仅有IP地址是不够的&#xff0c;IP数据报文必须封装成帧才能通过数据链路进行发送…

RuntimeError: Tensor must have a last dimension with stride 1

我在使用torch.view_as_complex将weight转化为复数时&#xff0c;遇到了这样一个错误&#xff1a;由于我在对weight使用view_as_complex之前使用了F.interpolate函数进行了分辨率调整&#xff0c;因此只需对张量weight添加.contiguous()即可。

安卓抓包总结

背景 接手公司项目安卓xhs项目&#xff0c;该项目为android数据采集接口&#xff0c;该接口目前只能调用一次&#xff0c;然后就被平台风控&#xff0c;导致无法使用&#xff0c;需要恢复该接口继续使用&#xff0c;所以需要抓包分析调用的接口&#xff0c;对比接口参数和请求都…