文章目录
我们知道观察者模式可以实现代码的解耦,而spring的event模型就是这种设计模式的极佳体现。一个事件包含:事件发布、监听、和事件源。在spring中我们可以通过ApplicationContext的publishEvent方法去发布事件;通过实现ApplicationListener接口来自定义自己的监听器;继承ApplicationEvent类来实现事件源。下面以一个实例来说明:
1.spring下使用event模型
1.1 定义event
/**
* event的基类
*
* @author 94977
* @create 2018/7/22
*/
public abstract class BaseEvent extends ApplicationEvent {
public BaseEvent(Object source) {
super(source);
}
}
public class FaceEvent extends BaseEvent {
/**
* @author 94977
* @time 2018/7/22 15:50
* @param * @param null
* @return
* @description 必须要实现的构造方法
*/
public FaceEvent(User user) {
super(user);
}
}
1.2 event的监听处理类。监听类实现ApplicationListener 里onApplicationEvent方法即可
@Component
public class FaceEventListener implements ApplicationListener {
@Override
public void onApplicationEvent(ApplicationEvent event) {
if(event instanceof FaceEvent){
User user = (User) event.getSource();
LOGGER.info("===> 收到人脸事件: {}",user);
// .....
System.out.println("人脸事件处理结束。。。");
}
}
}
当然通过event instanceof FaceEvent判断事件源来处理的方式不是很优雅。有更好的方式,接口ApplicationListener支持泛型,可以通过泛型来判断处理的事件源。如下只处理FaceEvent源。
@Component
public class FaceEventListener extends BaseEventListener implements ApplicationListener<FaceEvent> {
@Override
public void onApplicationEvent