一、Spring事件发布
Spring事件发布机制是一种非常重要的通信方式,使用观察者设计模式,可以用于状态通知、业务解耦、异步处理的业务场景。
Spring事件发布对应的几个概念:
1、事件及事件源(ApplicationEvent)
对应于观察者模式中的主题,事件源发生某事件是特定事件监听器被触发的原因。Spring的ApplicationEvent是事件类,事件源soruce作为ApplicationEvent的一个属性维护,有用户自定义传入。
2、事件发布器(ApplicationEventPublisher)
事件发布器可以认为是事件监听的容器,对外提供发布事监听器的接口,通过publishEvent方法维护事件和事件监听器之间的映射关系,并在事件发生时负责通知事件监听器。
3、事件监听器
监听器监听事件源发布事件,由用户自行定义,使用@EventListener注解在方法上即可。
二、编码示例
1、定义事件源
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@ToString
public class CommonSource {
/**事件类型*/
private int sourceType;
/**消息体*/
private Object sourceData;
}
2、自定义事件
public class CommonEvent extends ApplicationEvent {
public CommonEvent(CommonSource source) {
super(source);
}
@Override
public CommonSource getSource() {
return (CommonSource) source;
}
}
3、定义事件发布器
@Component
public class CommonEventPublisher implements ApplicationEventPublisherAware {
private static ApplicationEventPublisher applicationEventPublisher;
@Override
public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
CommonEventPublisher.applicationEventPublisher = applicationEventPublisher;
}
public static void sendEvent(CommonEvent event) {
CommonEventPublisher.applicationEventPublisher.publishEvent(event);
}
}
4、事件发布与监听
事件发布
CommonEventPublisher.sendEvent(new CommonEvent(new CommonSource(1,"郭有才")));
事件监听
@EventListener
public void onEvent(CommonEvent event){
CommonSource source = event.getSource();
System.out.println("event----source=>"+source);
int sourceType = source.getSourceType();
if(sourceType==1){
/// 处理业务逻辑
}
}