一、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);}@Overridepublic CommonSource getSource() {return (CommonSource) source;}
}
3、定义事件发布器
@Component
public class CommonEventPublisher implements ApplicationEventPublisherAware {private static ApplicationEventPublisher applicationEventPublisher;@Overridepublic 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,"郭有才")));
事件监听
@EventListenerpublic void onEvent(CommonEvent event){CommonSource source = event.getSource();System.out.println("event----source=>"+source);int sourceType = source.getSourceType();if(sourceType==1){/// 处理业务逻辑}}