spring 中的事件
说到事件,可能脑海中最先浮现的就是 “订阅-发布”模式。通俗点讲日常使用的各种 listener,listener去监听事件源,如果被监听的事件有变化就会通知listener,从而针对变化做相应的动作。
Java中提供了基本的事件处理基类:
- EventObject:所有事件状态对象都将从其派生的根类;
- EventListener:所有事件侦听器接口必须扩展的标记接口;
Spring 中的事件机制
在 Spring 容器中通过 ApplicationEvent
类和 ApplicationListener
接口来处理事件,如果某个 bean
实现 ApplicationListener
接口并被部署到容器中,那么每次对应的 ApplicationEvent
被发布到容器中都会通知该 bean
,这是典型的观察者模式。
Spring 的事件默认是同步的,即调用 publishEvent
方法发布事件后,它会处于阻塞状态,直到 onApplicationEvent
接收到事件并处理返回之后才继续执行下去,这种单线程同步的好处是可以进行事务管理。
我们使用一个示例,用户登录,发送消息给用户
1、先定义一个事件
package com.hzau.eventstudy.event;
import org.springframework.context.ApplicationEvent;
/**
* @ClassName UserLoginEvent
* @Description TOD