From b41f0f5ae8cb4eca1c94b515ffd2a0070504eb8e Mon Sep 17 00:00:00 2001 From: wangyu <727842003@qq.com> Date: Tue, 4 Oct 2022 22:51:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E7=BC=96=E8=AF=91?= =?UTF-8?q?=EF=BC=8C=E6=9B=B4=E5=8A=A0=E7=A8=B3=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../compiler/template/TemplateCompiler.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/flyfish-common/src/main/java/com/flyfish/framework/compiler/template/TemplateCompiler.java b/flyfish-common/src/main/java/com/flyfish/framework/compiler/template/TemplateCompiler.java index 0642e3a..7e1a1f2 100644 --- a/flyfish-common/src/main/java/com/flyfish/framework/compiler/template/TemplateCompiler.java +++ b/flyfish-common/src/main/java/com/flyfish/framework/compiler/template/TemplateCompiler.java @@ -12,6 +12,7 @@ import java.lang.reflect.Method; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; import java.util.stream.Collectors; @@ -22,26 +23,28 @@ import java.util.stream.Collectors; */ public class TemplateCompiler { + // 变量池缓存 + private static final Map, Map> POOL_CACHE = new ConcurrentHashMap<>(); + /** * 编译模板文件和源码数据为源代码字符串 * * @param dataClass 数据class - * @param filename 文件名 + * @param filename 文件名 * @return 结果 */ - public static Function compile(Class dataClass, String filename) { + public static Function compile(Class dataClass, String filename) { // 获取文件内容 InputStream fis = TemplateCompiler.class.getResourceAsStream(filename); try { // 获取模板内容 String template = StreamUtils.copyToString(fis, StandardCharsets.UTF_8); // 准备变量池 - Map pool = Arrays.stream(BeanUtils.getPropertyDescriptors(dataClass)) - .collect(Collectors.toMap(descriptor -> "#{" + descriptor.getName() + "}", a -> a)); + Map pool = methodPool(dataClass); // 编译 return cfg -> pool.keySet().stream().reduce(template, (result, key) -> { // 获取读取方法 - Method method = pool.get(key).getReadMethod(); + Method method = pool.get(key); Object value = null; try { // 取得结果 @@ -57,6 +60,17 @@ public class TemplateCompiler { } } + /** + * 数据类方法池 + * + * @param dataClass 数据类 + * @return 结果 + */ + private static Map methodPool(Class dataClass) { + return POOL_CACHE.computeIfAbsent(dataClass, k -> Arrays.stream(BeanUtils.getPropertyDescriptors(k)) + .collect(Collectors.toMap(descriptor -> "#{" + descriptor.getName() + "}", PropertyDescriptor::getReadMethod))); + } + /** * 解析单个值 *