diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/util/ResourceUtil.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/util/ResourceUtil.java index ce97d640625909c41605113838dba0ec1d9c2d08..d9d21184e28edff745236c7bc1119fdf2c58ebea 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/util/ResourceUtil.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/util/ResourceUtil.java @@ -19,6 +19,7 @@ import java.util.Map; /** * 资源加载工具类 + * * @Author taoYan * @Date 2022/7/8 10:40 **/ @@ -34,13 +35,7 @@ public class ResourceUtil { /** * 所有java类 */ - private final static String CLASS_PATTERN="/**/*.class"; - - /** - * 所有枚举java类 - */ - - private final static String CLASS_ENUM_PATTERN="/**/*Enum.class"; + private final static String CLASS_PATTERN = "/**/*.class"; /** * 包路径 org.jeecg @@ -54,32 +49,33 @@ public class ResourceUtil { /** * 获取枚举类对应的字典数据 SysDictServiceImpl#queryAllDictItems() + * * @return */ - public static Map> getEnumDictData(){ - if(enumDictData.keySet().size()>0){ + public static Map> getEnumDictData() { + if (enumDictData.keySet().size() > 0) { return enumDictData; } ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver(); - String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + ClassUtils.convertClassNameToResourcePath(BASE_PACKAGE) + CLASS_ENUM_PATTERN; + String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + ClassUtils.convertClassNameToResourcePath(BASE_PACKAGE) + CLASS_PATTERN; try { Resource[] resources = resourcePatternResolver.getResources(pattern); MetadataReaderFactory readerFactory = new CachingMetadataReaderFactory(resourcePatternResolver); for (Resource resource : resources) { MetadataReader reader = readerFactory.getMetadataReader(resource); - String classname = reader.getClassMetadata().getClassName(); - Class clazz = Class.forName(classname); - EnumDict enumDict = clazz.getAnnotation(EnumDict.class); - if (enumDict != null) { + //解决加载器隔离导致的NoClassDefFoundError及非必要类加载导致的性能问题 + if (reader.getAnnotationMetadata().isAnnotated(EnumDict.class.getName())) { + String classname = reader.getClassMetadata().getClassName(); + Class clazz = Class.forName(classname); EnumDict annotation = clazz.getAnnotation(EnumDict.class); String key = annotation.value(); - if(oConvertUtils.isNotEmpty(key)){ + if (oConvertUtils.isNotEmpty(key)) { List list = (List) clazz.getDeclaredMethod(METHOD_NAME).invoke(null); enumDictData.put(key, list); } } } - }catch (Exception e){ + } catch (Exception e) { log.error("获取枚举类字典数据异常", e.getMessage()); // e.printStackTrace(); } @@ -88,24 +84,25 @@ public class ResourceUtil { /** * 用于后端字典翻译 SysDictServiceImpl#queryManyDictByKeys(java.util.List, java.util.List) + * * @param dictCodeList * @param keys * @return */ - public static Map> queryManyDictByKeys(List dictCodeList, List keys){ - if(enumDictData.keySet().size()==0){ + public static Map> queryManyDictByKeys(List dictCodeList, List keys) { + if (enumDictData.keySet().size() == 0) { getEnumDictData(); } Map> map = new HashMap<>(); for (String code : enumDictData.keySet()) { - if(dictCodeList.indexOf(code)>=0){ + if (dictCodeList.indexOf(code) >= 0) { List dictItemList = enumDictData.get(code); - for(DictModel dm: dictItemList){ + for (DictModel dm : dictItemList) { String value = dm.getValue(); - if(keys.indexOf(value)>=0){ + if (keys.indexOf(value) >= 0) { List list = new ArrayList<>(); list.add(new DictModel(value, dm.getText())); - map.put(code,list); + map.put(code, list); break; } } diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/RestDesformUtil.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/RestDesformUtil.java index d684346942bd15d544b6914c543c636fb08bcdc0..0ec3fc989828a75c0cdb1ba0ca5e21daf478447f 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/RestDesformUtil.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/RestDesformUtil.java @@ -14,12 +14,8 @@ import org.springframework.http.ResponseEntity; */ public class RestDesformUtil { - private static String domain = null; - private static String path = null; - - static { - domain = SpringContextUtils.getDomain(); - path = oConvertUtils.getString(SpringContextUtils.getApplicationContext().getEnvironment().getProperty("server.servlet.context-path")); + private static String getContextPath() { + return oConvertUtils.getString(SpringContextUtils.getApplicationContext().getEnvironment().getProperty("server.servlet.context-path")); } /** @@ -91,7 +87,7 @@ public class RestDesformUtil { } private static StringBuilder getBaseUrl() { - StringBuilder builder = new StringBuilder(domain).append(path); + StringBuilder builder = new StringBuilder(SpringContextUtils.getDomain()).append(getContextPath()); builder.append("/desform/api"); return builder; }