前言
好久没有更新Spring了,今天来分享一下Spring的事件监听机制,之前分享过一篇Spring监听机制的使用,今天从原理上进行解析,Spring的监听机制基于观察者模式,就是就是我们所说的发布订阅模式,这种模式可以在一定程度上实现代码的解耦,如果想要实现系统层面的解耦,那么消息队列就是我们的不二选择,消息队列本身也是发布订阅模式,只是不同的消息队列的实现方式不一样。
使用
之前的文章我们使用了注解的方式,今天我们使用接口的方式来实现。
定义事件
如下定义了一个事件AppEvent,它继承了ApplicationEvent类,如果我们要使用Spring的事件监听机制,那么我们定义的事件必须继承ApplicationEvent ,否则就无法使用。
/**
* 功能说明: 事件
* <p>
* Original @Author: steakliu-刘牌, 2023-03-30 11:02
* <p>
* Copyright (C)2020-2022 steakliu All rights reserved.
*/
public class AppEvent extends ApplicationEvent {
private final String event;
public AppEvent(Object source, String event) {
super(source);
this.event = event;
}
public String getEvent() {
return event;
}
}
定义事件监听器
事件监听器实现了ApplicationLister接口,其泛型为ApplicationEvent,因为要监听事件,所以必须按照Spring的规则来,onApplicationEvent方法就是监听到的事件,在这里我们可以进行我们的业务处理,我们可以看出AppLister我们加上了@Component注解,因为事件监听器需要加入Spring IOC容器中才能生效。
/**
* 功能说明:事件监听器
* <p>
* Original @Author: steakliu-刘牌, 2023-03-30 11:03
* <p>
* Copyright (C)2020-2022 steakliu All rights reserved.
*/
@Component
public class AppListener implements ApplicationListener<AppEvent> {
@Override
public void onApplicationEvent(AppEvent event) {
System.out.println("event: "+event.getEvent());
}
}
事件发布器
有了事件监听器,就需要发布事件,所以就需要一个事件发布器,事件发布器使用的是ApplicationEventPublisher,使用它的publishEvent方法进行事件发布。
/**
* 功能说明:事件发布器
* <p>
* Original @Author: steakliu-刘牌, 2023-06-11 13:55
* <p>
* Copyright (C)2020-2022 steakliu All rights reserved.
*/
@Component
public class AppPublisher {
@Resource
private