Spring中事件监听器

实现ApplicationListener接口

@Configuration
public class A48 {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(A48.class);context.getBean(MyService.class).doBusiness();context.close();}// 定义任务static class MyEvent extends ApplicationEvent{public MyEvent(Object source) {super(source);}}@Component@Slf4jstatic class MyService{@Resourceprivate ApplicationEventPublisher publisher;public void doBusiness(){log.info("主线业务");publisher.publishEvent(new MyEvent("myservice发送的事件"));}}@Component@Slf4jstatic class SmsApplicationListener implements ApplicationListener<MyEvent>{@Overridepublic void onApplicationEvent(MyEvent event) {log.info("支线任务");}}
}

@EventListener注解

@Component
@Slf4j
static class SmsApplicationListener{@EventListenerpublic void listener(MyEvent event){log.info("发送短信....");}
}

@EventListener结合线程池异步

@Component
@Slf4j
static class SmsApplicationListener{@EventListenerpublic void listener(MyEvent event){log.info("发送短信....");}
}// 线程池异步发送事件
@Bean
public ThreadPoolTaskExecutor executor(){ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(3);executor.setMaxPoolSize(10);executor.setQueueCapacity(100);return executor;
}@Bean
public SimpleApplicationEventMulticaster applicationEventMulticaster(ThreadPoolTaskExecutor executor){SimpleApplicationEventMulticaster multicaster = new SimpleApplicationEventMulticaster();multicaster.setTaskExecutor(executor);return multicaster;
}

自定义listener进行解析

public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(A48.class);SmsService bean = context.getBean(SmsService.class);for (Method method : SmsService.class.getMethods()) {if(method.isAnnotationPresent(MyListener.class)){ApplicationListener listener = new ApplicationListener() {@Overridepublic void onApplicationEvent(ApplicationEvent event) {try {method.invoke(bean,event);} catch (Exception e) {e.printStackTrace();}}};context.addApplicationListener(listener);}}context.close();
}@Component
@Slf4j
static class SmsService{@MyListenerpublic void listener(ApplicationEvent event){log.info("发送短信....");}
}

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

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

相关文章

C#绘制阻抗圆图初步

阻抗圆图&#xff0c;或者叫史密斯图&#xff0c;是无线电设计方面用的&#xff1b; 基本的阻抗圆图如下&#xff0c; 下面尝试用C#能不能画一下&#xff1b; 先在网上找一个画坐标的C#类&#xff0c;它的效果如下&#xff1b; 自己再增加一个函数&#xff0c;可以绘制中心在…

地址翻译过程(TLB-->页表-->Cache-->主存-->外存)

目录 1.地址结构 2.查找快表或页表&#xff1a;从虚拟地址--->物理地址 3.通过物理地址访问数据 设某系统满足以下条件&#xff1a; •有一个TLB与一个data Cache •存储器以字节为编址单位 •虚拟地址 14位 •物理地址 12位 •页面大小为 64B •TLB 为四路组相联&#x…

Windows 10怎麼系統中修改IP地址-okeyproxy

本文將詳細介紹在Windows 10系統中修改IP地址的步驟&#xff0c;並提供一些創新性的技巧&#xff0c;幫助大家更好地管理網路設置。 IP地址分為動態IP和靜態IP兩種。動態IP由路由器或ISP&#xff08;互聯網服務提供商&#xff09;自動分配&#xff0c;靜態IP則是手動設置的固定…

消防灭火设备软体水枪的使用方法

软体水枪是一款专为消防、应急救援等领域设计的灭火工具。其内胆采用大容量设计&#xff0c;能够储存足够的灭火剂&#xff0c;满足长时间、大范围的灭火需求。软体水枪是一种高效、便捷的灭火工具。它利用压力和流体力学原理&#xff0c;通过扣动扳机将储水箱中的水以高速喷射…

tp计算距离,筛选0-10km距离内商家

$field_lat lat;// 数据库字段名 - 纬度 -90到90 $field_lng lng;// 数据库字段名 - 经度 -180到180 $lat $params[lat];// 数据库字段名 - 纬度 -90到90 $lng $params[lng];// 数据库字段名 - 经度 -180到180 //语句 $field "(6378.138 …

【数据结构】笔试面试中常用的数据结构操作

笔试面试中常用的数据结构操作 排序与查找 请编写一个C程序&#xff0c;实现冒泡排序。 #include <stdio.h> // 冒泡排序函数 void bubbleSort(int arr[], int n) {for (int i 0; i < n - 1; i) {for (int j 0; j < n - i - 1; j) {if (arr[j] > arr[j 1]…

《金山 WPS AI 2.0:重塑办公未来的智能引擎》

AITOP100平台获悉&#xff0c;在 2024 世界人工智能大会这一科技盛宴上&#xff0c;金山办公以其前瞻性的视野和创新的技术&#xff0c;正式发布了 WPS AI 2.0&#xff0c;犹如一颗璀璨的星辰&#xff0c;照亮了智能办公的新征程&#xff0c;同时首次公开的金山政务办公模型 1.…

【python学习】将两个 数组连接起来

在Python中&#xff0c;将两个数组&#xff08;或列表&#xff09;连接起来非常简单。对于Python的原生列表&#xff0c;你可以使用加号()操作符或者extend()方法。对于NumPy数组&#xff0c;你可以使用numpy.concatenate()函数或numpy.append()函数&#xff08;尽管numpy.appe…

Spring AOP 使用方式

ProxyFactory代理工厂提供了基于切面构造代理对象的能力&#xff0c;Spring框架结合IOC对此进行了一层封装以适应多种场景。封装后为用户提供了一套Spring风格的“API”(使用方式)。 1 xml配置方式 引入AOP的schema: <beans xmlns"http://www.springframework.org/sche…

PyTorch | 加速模型训练的妙招

引言 提升机器学习模型的训练速度是每位机器学习工程师的共同追求。训练速度的提升意味着实验周期的缩短&#xff0c;进而加速产品的迭代过程。同时&#xff0c;这也表示在进行单一模型训练时&#xff0c;所需的资源将会减少。简而言之&#xff0c;我们追求的是效率。 熟悉 PyT…

padStart方法用来格式化数据

在别人写的代码中看到的padStart方法&#xff0c;没用过&#xff0c;浅浅记录一下~ padStart方法的使用 padStart是 字符串类型的方法&#xff0c;可以用来格式化字符串&#xff0c;在字符串添加指定的字符以达到指定的长度&#xff0c;例如&#xff1a;可以用来格式化日期 …

SpringSecurity框架【认证】

目录 一. 快速入门 二. 认证 2.1 登陆校验流程 2.2 原理初探 2.3 解决问题 2.3.1 思路分析 2.3.2 准备工作 2.3.3 实现 2.3.3.1 数据库校验用户 2.3.3.2 密码加密存储 2.3.3.3 登录接口 2.3.3.4 认证过滤器 2.3.3.5 退出登录 Spring Security是Spring家族中的一个…

Python爬虫并输出

1. Python爬虫并输出示例 下面是一个使用Python编写的简单网络爬虫示例&#xff0c;该爬虫将抓取某个网页&#xff08;例如&#xff0c;我们假设为https://example.com&#xff0c;但请注意实际使用时我们需要替换为一个真实且允许抓取的网站&#xff09;的标题&#xff08;Ti…

机器学习(V)--无监督学习(三)EM算法

EM算法 极大似然估计 极大似然估计&#xff1a;(maximum likelihood estimate, MLE) 是一种常用的模型参数估计方法。它假设观测样本出现的概率最大&#xff0c;也即样本联合概率&#xff08;也称似然函数&#xff09;取得最大值。 为求解方便&#xff0c;对样本联合概率取对…

工作理念分享

上份工作的上级&#xff0c;分享他的工作理念&#xff0c;做个整理&#xff1a; 1 士气上要奋发向上有追求&#xff0c;最低限度当然是要恰饭&#xff0c;保证生活&#xff0c;最好是做一些事情&#xff0c;把钱挣了的同时也能有更多的收获。 2 公司为社会&#xff0c;用户创造…

华为HCIP Datacom H12-821 卷36

1.单选题 在PIM- SM中&#xff0c;以下关于RP 的描述&#xff0c;错误的是哪一选项? A、在PIM-SM中&#xff0c;组播数据流量不一定必须经过RP的转发。 B、对于一个组播组来说&#xff0c;可以同时有多个RP地址&#xff0c;提升网络可靠性。 C、组播网络中&#xff0c;可以…

【BUG】已解决:JsonMappingException

已解决&#xff1a;JsonMappingException 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 概述&#xff1a; 没有getter方法的实体的序列化&#xff0c;并解决Jackson引发的JsonMappingException异常。 默认情况下&#xff0c;Jackson 2只会处理公有字段或具有公有get…

vue 级联下拉框选择的思维

在原来的js的思维下&#xff0c;级联下拉框的选择往往是&#xff0c;先绑定一级下拉框的菜单&#xff0c;然后在该下拉框下onchange, 在onchange事件中获取当前选项&#xff0c;然后绑定二级下拉框的数据&#xff0c;以此类推…… 在vue框架下应该改变思维&#xff0c;首先设置…

经典再现,回顾常见排序算法之冒泡排序,附Java源码及优化改进实现

回顾一下排序算法&#xff0c;老酒装新瓶&#xff0c;给自己的技能点做个回放。 排序(Sorting) 是计算机程序设计中的一种重要操作&#xff0c;它的功能是将一个数据元素(或记录)的任意序列&#xff0c;重新排列成一个有序的序列&#xff0c;也可以理解为高矮个站队。 衡量排…

Renesas R7FA8D1BH (Cortex®-M85) 控制DS18B20

目录 概述 1 软硬件 1.1 软硬件环境信息 1.2 开发板信息 1.3 调试器信息 2 FSP和KEIL配置 2.1 硬件接口电路 2.2 FSB配置DS18B20的IO 2.3 生成Keil工程文件 3 DS18B20驱动代码 3.1 DS18B20介绍 3.2 DS18B20驱动实现 3.2.1 IO状态定义 3.2.2 读IO状态函数 3.2.3…