Spring事件监听模式应用场景和思路

本文介绍Spring框架中的事件监听机制,包括事件定义、事件发布及监听处理。通过具体代码实例展示了如何利用Spring事件监听机制实现解耦和灵活的事件处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是事件

 程序中的事件其实和现实差不多,例如:Js中的事件有很多 如鼠标的单击事件onclick。

当点击某个按钮时--触发某个方法。当你不去触发这个事件、这个事件就永远的在等待 唤醒事件的人;

事件三要素

1、定义一个事件(火灾事件、碰撞事件、收到信息事件。。。)

2、有一个事件的触发者 在合适的时机去触发这个事件,例如 触发起火 导致温度传感器上升、导致系统发生报警 --触发温度过高事件- 事件自动处置系统 根据温度过高事件的信息--触发喷淋装置启动;

这个例子中处处都有事件发布者和事件处理人的影子;

3、必须要有一个事件处理者时刻监听目前有没有新的事件要处理(例如 警察的110客服人员,时刻等着桌子的电话响起,然后接电话就是处理事件的过程,电话响起就是事件的监听器收到了事件的信息)

Spring事件监听实现

1、定义一个事件

class MyEvent extends ApplicationEvent{

	
	
	private static final long serialVersionUID = 1L;
	
	String msg;
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
	public MyEvent(Object source,String msg) {
		super(source);
		this.msg=msg;
	}
	
	
	
}
//此处定义一个事件

2、定义一个事件发布者

@Component
@Slf4j
public class KafkaConsumerListener{

	@Autowired
	private ApplicationContext applicationContext;
	 static int i=0;
	 @KafkaListener(topics = "topic" )
	    public void onMessage(List<ConsumerRecord<?,?>> data) {
	        JSONObject json = JSONObject.fromObject("{}");
	        for (ConsumerRecord<?, ?> consumerRecord : data) {
	        	   json = JSONArray.fromObject(consumerRecord.value()).getJSONObject(0);
	        	   log.info((i++)+json.toString());
	   	        applicationContext.publishEvent( new MyEvent(this, json.toString()));
	   	 
			}
	     
	 }

	
//当收到kafka信息后-在容器内部发布一个MyEvent类型事件、
//其实KafkaListener 本身也是一个事件的处理员
	
	
}

 

3、定义一个事件的监听处理器

@Component
@Slf4j
 class MyannotationLisetener{
	

	
	static int i=0;
	@EventListener
	public void Listener2(MyEvent event)
	{
 	   log.error((i++)+event.getMsg());

		
	}
	
}
//此处定义一个监听器来监听发布过来的事件信息 并进行处理

这样做的好处是什么

1、单一职责原则、代码耦合降低、事件的处理人员只需关注处理的代码、发布人员只需关注发布的代码;

2、即可同步 也可异步;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值