This commit is contained in:
Suomm 2024-04-12 10:01:14 +08:00
parent c7cc85500d
commit 6afc5f1f7b

View File

@ -27,6 +27,7 @@ import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactory;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@ -66,9 +67,9 @@ public class FlexGlobalConfig {
/** /**
* entity 的监听器 * entity 的监听器
*/ */
private Map<Class<?>, SetListener> entitySetListeners = new ConcurrentHashMap<>(); private Map<Class<?>, List<SetListener>> entitySetListeners = new ConcurrentHashMap<>();
private Map<Class<?>, UpdateListener> entityUpdateListeners = new ConcurrentHashMap<>(); private Map<Class<?>, List<UpdateListener>> entityUpdateListeners = new ConcurrentHashMap<>();
private Map<Class<?>, InsertListener> entityInsertListeners = new ConcurrentHashMap<>(); private Map<Class<?>, List<InsertListener>> entityInsertListeners = new ConcurrentHashMap<>();
/** /**
@ -147,49 +148,49 @@ public class FlexGlobalConfig {
this.keyConfig = keyConfig; this.keyConfig = keyConfig;
} }
public Map<Class<?>, SetListener> getEntitySetListeners() { public Map<Class<?>, List<SetListener>> getEntitySetListeners() {
return entitySetListeners; return entitySetListeners;
} }
public void setEntitySetListeners(Map<Class<?>, SetListener> entitySetListeners) { public void setEntitySetListeners(Map<Class<?>, List<SetListener>> entitySetListeners) {
this.entitySetListeners = entitySetListeners; this.entitySetListeners = entitySetListeners;
} }
public Map<Class<?>, UpdateListener> getEntityUpdateListeners() { public Map<Class<?>, List<UpdateListener>> getEntityUpdateListeners() {
return entityUpdateListeners; return entityUpdateListeners;
} }
public void setEntityUpdateListeners(Map<Class<?>, UpdateListener> entityUpdateListeners) { public void setEntityUpdateListeners(Map<Class<?>, List<UpdateListener>> entityUpdateListeners) {
this.entityUpdateListeners = entityUpdateListeners; this.entityUpdateListeners = entityUpdateListeners;
} }
public Map<Class<?>, InsertListener> getEntityInsertListeners() { public Map<Class<?>, List<InsertListener>> getEntityInsertListeners() {
return entityInsertListeners; return entityInsertListeners;
} }
public void setEntityInsertListeners(Map<Class<?>, InsertListener> entityInsertListeners) { public void setEntityInsertListeners(Map<Class<?>, List<InsertListener>> entityInsertListeners) {
this.entityInsertListeners = entityInsertListeners; this.entityInsertListeners = entityInsertListeners;
} }
public void registerSetListener(SetListener listener, Class<?>... classes) { public void registerSetListener(SetListener listener, Class<?>... classes) {
for (Class<?> aClass : classes) { for (Class<?> aClass : classes) {
entitySetListeners.put(aClass, listener); entitySetListeners.computeIfAbsent(aClass, k -> new ArrayList<>()).add(listener);
} }
} }
public void registerUpdateListener(UpdateListener listener, Class<?>... classes) { public void registerUpdateListener(UpdateListener listener, Class<?>... classes) {
for (Class<?> aClass : classes) { for (Class<?> aClass : classes) {
entityUpdateListeners.put(aClass, listener); entityUpdateListeners.computeIfAbsent(aClass, k -> new ArrayList<>()).add(listener);
} }
} }
public void registerInsertListener(InsertListener listener, Class<?>... classes) { public void registerInsertListener(InsertListener listener, Class<?>... classes) {
for (Class<?> aClass : classes) { for (Class<?> aClass : classes) {
entityInsertListeners.put(aClass, listener); entityInsertListeners.computeIfAbsent(aClass, k -> new ArrayList<>()).add(listener);
} }
} }
public SetListener getSetListener(Class<?> entityClass) { public List<SetListener> getSetListener(Class<?> entityClass) {
return entitySetListeners.get(entityClass); return entitySetListeners.get(entityClass);
} }
@ -204,21 +205,23 @@ public class FlexGlobalConfig {
return this.findSupportedListeners(entityClass, this.entitySetListeners); return this.findSupportedListeners(entityClass, this.entitySetListeners);
} }
public UpdateListener getUpdateListener(Class<?> entityClass) { public List<UpdateListener> getUpdateListener(Class<?> entityClass) {
return entityUpdateListeners.get(entityClass); return entityUpdateListeners.get(entityClass);
} }
/** /**
* 查找支持该 {@code entityClass} 的监听器 * 查找支持该 {@code entityClass} 的监听器
*
* @param entityClass 实体class * @param entityClass 实体class
* @param listenerMap 监听器map * @param listenerMap 监听器map
* @param <T> 监听器类型
* @return 符合条件的监听器 * @return 符合条件的监听器
* @param <T> 监听器类型
*/ */
public <T extends Listener> List<T> findSupportedListeners(Class<?> entityClass, Map<Class<?>, T> listenerMap) { public <T extends Listener> List<T> findSupportedListeners(Class<?> entityClass, Map<Class<?>, List<T>> listenerMap) {
return listenerMap.entrySet().stream() return listenerMap.entrySet()
.stream()
.filter(entry -> entry.getKey().isAssignableFrom(entityClass)) .filter(entry -> entry.getKey().isAssignableFrom(entityClass))
.map(Map.Entry::getValue) .flatMap(e -> e.getValue().stream())
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
@ -234,7 +237,7 @@ public class FlexGlobalConfig {
} }
public InsertListener getInsertListener(Class<?> entityClass) { public List<InsertListener> getInsertListener(Class<?> entityClass) {
return entityInsertListeners.get(entityClass); return entityInsertListeners.get(entityClass);
} }