|
@@ -35,8 +35,21 @@ public class DefaultEnhanceService<M extends BaseMapper<T>, T> extends ServiceIm
|
|
|
private final List<DeleteListener<T>> deleteListeners = Lists.newArrayListWithCapacity(0);
|
|
|
private final List<ModifyListener<T>> modifyListeners = Lists.newArrayListWithCapacity(0);
|
|
|
|
|
|
+ /**
|
|
|
+ * 判断是否是当前数据模型监听器
|
|
|
+ *
|
|
|
+ * @param type 操作类型
|
|
|
+ * @param listener 监听器实例
|
|
|
+ * @return true/false
|
|
|
+ */
|
|
|
+ private boolean isEntityListener(Class<?> type, OperateListener<?> listener) {
|
|
|
+ Type parameterized = ObjectUtils.lookupSuperclassParameterized(listener.getClass(), type);
|
|
|
+ return ObjectUtils.type2class(parameterized) == this.getEntityClass();
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
|
|
|
+ // 注册事件监听器
|
|
|
applicationContext.getBeansOfType(OperateListener.class).values().forEach(this::register);
|
|
|
}
|
|
|
|
|
@@ -56,28 +69,13 @@ public class DefaultEnhanceService<M extends BaseMapper<T>, T> extends ServiceIm
|
|
|
|
|
|
@Override
|
|
|
public synchronized void register(@NonNull OperateListener<T> listener) {
|
|
|
- // 校验监听数据类型与当前数据模型类型是否匹配
|
|
|
- Class<?> type;
|
|
|
- if (listener instanceof AddListener) {
|
|
|
- type = AddListener.class;
|
|
|
- } else if (listener instanceof DeleteListener) {
|
|
|
- type = DeleteListener.class;
|
|
|
- } else if (listener instanceof ModifyListener) {
|
|
|
- type = ModifyListener.class;
|
|
|
- } else {
|
|
|
- type = OperateListener.class;
|
|
|
- }
|
|
|
- Type parameterized = ObjectUtils.lookupSuperclassParameterized(listener.getClass(), type);
|
|
|
- if (ObjectUtils.type2class(parameterized) != this.getEntityClass()) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- // 注册监听器
|
|
|
- if (listener instanceof AddListener) {
|
|
|
+ if (listener instanceof AddListener && this.isEntityListener(AddListener.class, listener)) {
|
|
|
this.addListeners.add((AddListener<T>) listener);
|
|
|
- } else if (listener instanceof DeleteListener) {
|
|
|
+ }
|
|
|
+ if (listener instanceof DeleteListener && this.isEntityListener(DeleteListener.class, listener)) {
|
|
|
this.deleteListeners.add((DeleteListener<T>) listener);
|
|
|
- } else if (listener instanceof ModifyListener) {
|
|
|
+ }
|
|
|
+ if (listener instanceof ModifyListener && this.isEntityListener(ModifyListener.class, listener)) {
|
|
|
this.modifyListeners.add((ModifyListener<T>) listener);
|
|
|
}
|
|
|
}
|