前言
代码
工厂类:
@Component
public class XXEventHandlerFactory implements ApplicationContextAware {
private ApplicationContext applicationContext;
Map<Integer, XXEventHandler> handlerMap = new HashMap<>();
@Override
public void setApplicationContext(@NonNull ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@PostConstruct
private void afterPropertiesSet() {
applicationContext.getBeansOfType(XXEventHandler.class).values()
.forEach(handler -> handlerMap.put(handler.getEventType(), handler));
}
public XXEventHandler getHandler(Integer eventType) {
return handlerMap.get(eventType);
}
}
处理器接口:
public interface XXEventHandler {
// 获取事件类型
Integer getEventType();
// 处理程序 (此处可定义为实体类,也可使用String)
void handle(XXEventEntity eventDTO);
}
实际处理器实现:
@Component
public class AEventHandler implements XXEventHandler {
@Override
public Integer getEventType() {
// 使用枚举类返回唯一标识该处理器的标记
return XXEventEnum.A.getEventType();
}
@Override
public void handle(XXEventEntity eventDTO) {
// xxx 进行事件处理
}
}
使用
// 生产事件
XXEventEntity aEventEntity = new XXEventEntity();
aEventEntity.setEventType(XXEventEnum.A.getEventType());
aEventEntity.setXXX();
// 此处可以将 事件存进数据库/发送至消息队列
// 处理事件
// 1. 从数据库/消息队列获取事件
// 2. 获取aEventEntity eventType
// 3. 获取处理器 xXEventHandlerFactory.getHandler(eventType).handle(aEventEntity);
标签:applicationContext,getEventType,eventType,void,模式,工厂,aEventEntity,应用,public
From: https://www.cnblogs.com/handsometaoa/p/18458660