diff --git a/src/main/java/org/redkale/annotation/Priority.java b/src/main/java/org/redkale/annotation/Priority.java
index 823bca725..207bb2a6e 100644
--- a/src/main/java/org/redkale/annotation/Priority.java
+++ b/src/main/java/org/redkale/annotation/Priority.java
@@ -30,6 +30,16 @@ import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
public @interface Priority {
+ /**
+ * 最高优先级, 其他值必须比此值小
+ */
+ public static final int HIGHTEST = Integer.MAX_VALUE;
+
+ /**
+ * 最低优先级, 其他值必须比此值大
+ */
+ public static final int LOWEST = Integer.MIN_VALUE;
+
/**
* 优先级值
*
diff --git a/src/main/java/org/redkale/net/Filter.java b/src/main/java/org/redkale/net/Filter.java
index 463678eab..59ff2283a 100644
--- a/src/main/java/org/redkale/net/Filter.java
+++ b/src/main/java/org/redkale/net/Filter.java
@@ -11,7 +11,7 @@ import org.redkale.util.AnyValue;
/**
* 协议拦截器类, 类似JavaEE中的javax.servlet.Filter
- * javax.servlet.Filter方法doFilter是同步操作,此Filter.doFilter则是异步操作,方法return前需要调用Response.nextEvent()方可执行下一个Filter
+ * javax.servlet.Filter方法doFilter是同步操作,此Filter.doFilter则是异步操作,方法return前必须调用Response.nextEvent()
* 通过给Filter标记注解@Priority来确定执行的顺序, Priority.value值越大越先执行
* 如果doFilter方法是非阻塞的,需要在Filter类上标记@NonBlocking
*
diff --git a/src/main/java/org/redkale/source/DataSqlSource.java b/src/main/java/org/redkale/source/DataSqlSource.java
index 5a79a60f8..5c8e237ba 100644
--- a/src/main/java/org/redkale/source/DataSqlSource.java
+++ b/src/main/java/org/redkale/source/DataSqlSource.java
@@ -232,8 +232,7 @@ public interface DataSqlSource extends DataSource {
if (!rset.next()) {
return null;
}
- if (type == byte[].class || type == String.class || type.isPrimitive() || Number.class.isAssignableFrom(type)
- || (!Map.class.isAssignableFrom(type) && type.getName().startsWith("java."))) {
+ if (EntityBuilder.isSimpleType(type)) {
return (V) formatColumnValue(type, rset.getObject(1));
}
return EntityBuilder.load(type).getObjectValue(rset);
@@ -246,8 +245,7 @@ public interface DataSqlSource extends DataSource {
if (!rset.next()) {
return null;
}
- if (type == byte[].class || type == String.class || type.isPrimitive() || Number.class.isAssignableFrom(type)
- || (!Map.class.isAssignableFrom(type) && type.getName().startsWith("java."))) {
+ if (EntityBuilder.isSimpleType(type)) {
return (V) formatColumnValue(type, rset.getObject(1));
}
return EntityBuilder.load(type).getObjectValue(rset);
@@ -257,8 +255,7 @@ public interface DataSqlSource extends DataSource {
@AsmDepends
default List nativeQueryList(Class type, String sql, Map params) {
return nativeQuery(sql, rset -> {
- if (type == byte[].class || type == String.class || type.isPrimitive() || Number.class.isAssignableFrom(type)
- || (!Map.class.isAssignableFrom(type) && type.getName().startsWith("java."))) {
+ if (EntityBuilder.isSimpleType(type)) {
List list = new ArrayList<>();
while (rset.next()) {
list.add(rset.wasNull() ? null : (V) formatColumnValue(type, rset.getObject(1)));
@@ -272,8 +269,7 @@ public interface DataSqlSource extends DataSource {
@AsmDepends
default CompletableFuture> nativeQueryListAsync(Class type, String sql, Map params) {
return nativeQueryAsync(sql, rset -> {
- if (type == byte[].class || type == String.class || type.isPrimitive() || Number.class.isAssignableFrom(type)
- || (!Map.class.isAssignableFrom(type) && type.getName().startsWith("java."))) {
+ if (EntityBuilder.isSimpleType(type)) {
List list = new ArrayList<>();
while (rset.next()) {
list.add(rset.wasNull() ? null : (V) formatColumnValue(type, rset.getObject(1)));
diff --git a/src/main/java/org/redkale/source/EntityBuilder.java b/src/main/java/org/redkale/source/EntityBuilder.java
index 66923743a..bf26be7a2 100644
--- a/src/main/java/org/redkale/source/EntityBuilder.java
+++ b/src/main/java/org/redkale/source/EntityBuilder.java
@@ -17,6 +17,8 @@ import org.redkale.util.*;
* 可以是实体类,也可以是查询结果的JavaBean类
*
* @author zhangjx
+ * @param T
+ *
* @since 2.8.0
*/
public class EntityBuilder {
@@ -54,7 +56,7 @@ public class EntityBuilder {
private final Attribute[] unconstructorAttributes;
//key:类字段名
- private final Map> attributeMap;
+ final Map> attributeMap;
//key:数据库字段名
private final Map> sqlAttrMap;
@@ -81,8 +83,13 @@ public class EntityBuilder {
attributeMap.forEach((k, v) -> sqlAttrMap.put(getSQLColumn(null, k), v));
}
+ public static boolean isSimpleType(Class type) {
+ return type == byte[].class || type == String.class || type.isPrimitive() || Number.class.isAssignableFrom(type)
+ || (!Map.class.isAssignableFrom(type) && type.getName().startsWith("java."));
+ }
+
public static EntityBuilder load(Class type) {
- return cacheMap.computeIfAbsent(type, t -> create(t));
+ return cacheMap.computeIfAbsent(type, EntityBuilder::create);
}
private static EntityBuilder create(Class type) {
diff --git a/src/main/java/org/redkale/source/spi/DataSqlMapperBuilder.java b/src/main/java/org/redkale/source/spi/DataSqlMapperBuilder.java
index 7de43885b..e4e7412a7 100644
--- a/src/main/java/org/redkale/source/spi/DataSqlMapperBuilder.java
+++ b/src/main/java/org/redkale/source/spi/DataSqlMapperBuilder.java
@@ -33,6 +33,7 @@ import static org.redkale.source.DataNativeSqlInfo.SqlMode.SELECT;
import org.redkale.source.DataNativeSqlParser;
import org.redkale.source.DataSqlMapper;
import org.redkale.source.DataSqlSource;
+import org.redkale.source.EntityBuilder;
import org.redkale.source.Flipper;
import org.redkale.source.SourceException;
import org.redkale.util.RedkaleClassLoader;
@@ -84,7 +85,7 @@ public final class DataSqlMapperBuilder {
} catch (Throwable t) {
t.printStackTrace();
}
-
+ EntityBuilder.load(entityType);
List- items = new ArrayList<>();
Map selfMethodBeans = AsmMethodBoost.getMethodBeans(mapperType);
for (Method method : mapperType.getMethods()) {
@@ -221,7 +222,10 @@ public final class DataSqlMapperBuilder {
Class[] paramTypes = method.getParameterTypes();
List methodParams = methodBean.getParams();
List insns = new ArrayList<>();
-
+ if (!EntityBuilder.isSimpleType(componentTypes[0])) {
+ EntityBuilder.load(componentTypes[0]);
+ }
+
mv = new MethodDebugVisitor(cw.visitMethod(ACC_PUBLIC, method.getName(), methodBean.getDesc(), methodBean.getSignature(), null)).setDebug(false);
Label l0 = new Label();
mv.visitLabel(l0);
diff --git a/src/main/java/org/redkale/source/spi/SourceModuleEngine.java b/src/main/java/org/redkale/source/spi/SourceModuleEngine.java
index c65a38a61..cc7739dfd 100644
--- a/src/main/java/org/redkale/source/spi/SourceModuleEngine.java
+++ b/src/main/java/org/redkale/source/spi/SourceModuleEngine.java
@@ -146,6 +146,7 @@ public class SourceModuleEngine extends ModuleEngine implements SourceManager {
* @param namespace 命名空间
* @param events 变更项
*/
+ @Override
public void onEnvironmentChanged(String namespace, List events) {
Set sourceRemovedKeys = new HashSet<>();
Properties sourceChangedProps = new Properties();
@@ -307,6 +308,7 @@ public class SourceModuleEngine extends ModuleEngine implements SourceManager {
/**
* 服务全部停掉后被调用
*/
+ @Override
public void onServersPostStop() {
for (DataSource source : dataSources) {
if (source == null) {
@@ -343,12 +345,14 @@ public class SourceModuleEngine extends ModuleEngine implements SourceManager {
*
* @return CacheSource集合
*/
+ @Override
public Map getCacheSources() {
Map sources = new HashMap<>();
cacheSources.forEach(v -> sources.put(v.resourceName(), v));
return sources;
}
+ @Override
public CacheSource loadCacheSource(final String sourceName, boolean autoMemory) {
cacheSourceLock.lock();
try {
@@ -402,12 +406,14 @@ public class SourceModuleEngine extends ModuleEngine implements SourceManager {
*
* @return DataSource集合
*/
+ @Override
public Map getDataSources() {
Map sources = new HashMap<>();
dataSources.forEach(v -> sources.put(v.resourceName(), v));
return sources;
}
+ @Override
public DataSource loadDataSource(final String sourceName, boolean autoMemory) {
dataSourceLock.lock();
try {