ApplicationListener的简单使用

news/2024/10/12 10:20:06

ApplicationListener在Spring框架中的作用是监听并处理应用程序中的事件。
ApplicationListener接口定义了一个onApplicationEvent方法,当监听器监听到事件发布后,会执行这个方法。这使得开发者能够灵活地响应应用程序中的各种事件,实现发布-订阅模式的功能。通过这种方式,Spring框架实现了应用程序内部不同组件之间的松耦合通信,提高了系统的可扩展性和可维护性。
代码结构:

1、定义监听实体

根据发布和订阅的实体不同,进行区分不同的监听。
People

package com.dyaqi.domain;import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.context.ApplicationEvent;/*** @author: dongyq* @date: 2023/4/17 17:34* @since:* @功能描述:*/
@Getter
@Setter
@ToString
public class People extends ApplicationEvent {public String name;public Integer age;public People(Object source, String name, Integer age) {super(source);this.name = name;this.age = age;}
}

User

package com.dyaqi.domain;import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.context.ApplicationEvent;/*** @author: dongyq* @date: 2023/4/17 17:34* @since:* @功能描述:*/
@Getter
@Setter
@ToString
public class User extends ApplicationEvent {public String name;public Integer age;public User(Object source, String name, Integer age) {super(source);this.name = name;this.age = age;}
}

2、定义发布者

package com.dyaqi.publisher;import com.dyaqi.domain.People;
import com.dyaqi.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;/*** @author: dongyq* @date: 2023/4/17 17:40* @since:* @功能描述:*/
@Component
public class Publisher {@Autowiredprivate ApplicationEventPublisher applicationEventPublisher;public void publis() {System.out.println("发布事件");applicationEventPublisher.publishEvent(new People(this,"张三", 29));applicationEventPublisher.publishEvent(new User(this,"李四", 18));}
}

3、定义订阅者

Listener1 监听 People

package com.dyaqi.listener;import com.dyaqi.domain.People;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;/*** @author: dongyq* @date: 2023/4/17 17:37* @since:* @功能描述:*/
@Component
public class Listener1 implements ApplicationListener<People> {@Overridepublic void onApplicationEvent(People people) {System.out.println("Listener1 监听到事件");System.out.println(people.toString());}
}

Listener2监听 User

package com.dyaqi.listener;import com.dyaqi.domain.People;
import com.dyaqi.domain.User;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;/*** @author: dongyq* @date: 2023/4/17 17:37* @since:* @功能描述:*/
@Component
public class Listener2 implements ApplicationListener<User> {@Overridepublic void onApplicationEvent(User user) {System.out.println("Listener2 监听到事件");System.out.println(user.toString());}
}

使用注解监听

package com.dyaqi.listener;import com.dyaqi.domain.User;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;/*** @author: dongyq* @date: 2023/4/17 17:37* @since:* @功能描述:*/
@Component
public class Listener3 {@EventListenerpublic void onApplicationEvent(User user) {System.out.println("Listener3 监听到事件");System.out.println(user.toString());}
}

4、日志

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

智能编程支持分析本地工程文件,项目级开发效率再度提升!

CodeGeeX的智能问答新增关联本地文件的系列功能,用户在智能问答的输入框中输入@,就可以在弹出框中选择需要使用的指令。从而能够针对所关联的文件给出更有针对性的问答和代码建议。下面我们将分别介绍在编程工作中,如何关联本地文件,并且使用不同的指令,来获得更精准的分析…

100%国产化网卡,联瑞在行动

国产CPU与国产网卡都是我国信息技术产业中的重要组成部分,它们的发展对于提升我国信息技术水平、保障信息安全和促进经济发展具有重要意义。 国产CPU在近年来取得了显著进展。例如飞腾、申威、海光、华为鲲鹏、龙芯、兆芯等品牌的CPU产品百花齐放,这些产品在性能上已经能够与…

C++面向对象语言自制多级菜单

C++面向对象语言自制多级菜单,可移植进嵌入式系统因为要做一个小应用,需要一个菜单类,在网上找了许久,也没有找到一款心仪的菜单类,索性用C++语言,自制一个命令行级别的菜单类,并制作成库,现记录下来,供以后借鉴。 一、特性无限制条目 无限制层级 用户自定义条目和动作…

Redis之主从同步

概念主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。 前者称为主节点(master/leader),后者称为从节点(slave/follower); 数据的复制是单向的,只能由主节点到从节点。Master以写为主,Slave 以读为主。 默认情况下,每台Redis服务器都是主节点;且一个主节点可…

VulnHub - breach系列:breach-2.1

信息收集真的很重要,在不注意的角落可能藏着可用信息VulnHub - breach系列:breach-2.1 靶机描述 Breach 2.0 是多部分系列中的第二部分,是一项 boot2root/CTF 挑战,旨在展示真实场景,沿途充满了曲折和恶作剧。 VM 配置了静态 IP(192.168.110.151),因此您需要将主机适配…

[OpenBMC] LDAP 设定(一) - nss-pam-ldapd

OpenBMC ldap设定和验证,可分成几个部分,本篇会先介绍第一个部分nss-pam-ldapdnss-pam-ldapd LDAP server 架设 Redfish/Web设定 nss-pam-ldapd 底下 OpenBMC 对nss-pam-ldapd 的描述 Bringing the LDAP authentication module support in openbmc stack requires to pull…

斯坦福大学Mobile ALOHA——一款革命性的家政机器人

https://www.bilibili.com/video/BV1nT421e7Cy/?spm_id_from=333.999.0.0 随着社会老龄化问题的加剧,家政机器人成为了解决日常生活辅助需求的新方向。欢迎来了解Mobile Aloha家政机器人的技术原理和潜力——它将把你的家务活变成轻而易举的事。推动这款机器人功能的技术特点…

某东 h5st 4.7 逆向分析

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术…