应用场景:
在开发中,有时需要监听某些事件,在事件触发时,执行相应的逻辑。
也可以说是基于事件驱动的观察者模式。
比如当点击某个按钮时,触发相应的功能,或者用户下单通知等等。
SpringBoot 可以通过 ApplicationEvent 、ApplicationEventPublisher、@EventListener 实现事件的发布订阅。
Event事件
继承 ApplicationEvent,定义 Event事件。
构造方法,需要加入一个父类的参数 source,表示事件的来源。source 参数传入事件来源,事件发生的对象,比如this。
public class MyEvent extends ApplicationEvent {private String name;private String orderId;public MyEvent(Object source, String name, String orderId) {super(source);this.name = name;this.orderId = orderId;}//自行添加 getter()、setter()等方法。此处忽略
}
订阅事件
通过 @EventListener 订阅事件,对事件进行监听。
@Async 注解进行异步处理。
@Slf4j
@Component
public class MyEventListener {@Async@EventListener(MyEvent.class)public void listener(MyEvent event) {log.info("listener event start");//执行事件对应的业务逻辑log.info("do something.");}
}
发布事件:
通过 ApplicationEventPublisher 发布事件。
发布事件后,就会自动触发事件监听的逻辑。
@Service
public class EventPublisherService {@Resourceprivate ApplicationEventPublisher publisher;public void doSomething() {//其他业务逻辑//发布事件//使用时传入事件来源,事件发生的对象,比如thisMyEvent event = new MyEvent(this, "orderQueue", "12345");event.setName("orderQueue");publisher.publishEvent(event);}}