From c68086a63fde97da93b42dda808420d45cafccc9 Mon Sep 17 00:00:00 2001 From: "everywhere.z" Date: Mon, 22 Sep 2025 00:06:02 +0800 Subject: [PATCH] =?UTF-8?q?bug=20#ICZ1M1=20=E8=A7=A3=E5=86=B3=E5=9C=A82.15?= =?UTF-8?q?.0=E4=B8=AD=EF=BC=8C=E8=8E=B7=E5=8F=96Annotation=E7=BC=BA?= =?UTF-8?q?=E5=A4=B1=E4=BA=86=E7=BC=93=E5=AD=98=E5=AF=BC=E8=87=B4=E7=9A=84?= =?UTF-8?q?=E6=80=A7=E8=83=BD=E5=BE=AE=E5=B0=8F=E6=8D=9F=E5=A4=B1=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yomahub/liteflow/annotation/AnnoUtil.java | 32 +++++++++++++++++++ .../liteflow/core/ComponentInitializer.java | 3 +- .../com/yomahub/liteflow/slot/DataBus.java | 3 +- .../spi/solon/SolonDeclComponentParser.java | 4 +-- .../process/impl/ScriptBeanProcess.java | 3 +- .../spi/spring/SpringDeclComponentParser.java | 2 +- 6 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 liteflow-core/src/main/java/com/yomahub/liteflow/annotation/AnnoUtil.java diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/AnnoUtil.java b/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/AnnoUtil.java new file mode 100644 index 000000000..950128c38 --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/AnnoUtil.java @@ -0,0 +1,32 @@ +package com.yomahub.liteflow.annotation; + +import cn.hutool.core.annotation.AnnotationUtil; +import cn.hutool.core.util.StrUtil; + +import java.lang.annotation.Annotation; +import java.lang.reflect.AnnotatedElement; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class AnnoUtil { + + private static Map annoCacheMap = new ConcurrentHashMap<>(); + + public static A getAnnotation(AnnotatedElement annotatedElement, Class annotationType) { + String cacheKey = StrUtil.format("{}-{}", annotatedElement, annotationType.getSimpleName()); + + if (annoCacheMap.containsKey(cacheKey)){ + return (A)annoCacheMap.get(cacheKey); + } + + A annotation = AnnotationUtil.getAnnotationAlias(annotatedElement, annotationType); + + if (annotation == null) { + return null; + } + + annoCacheMap.put(cacheKey, annotation); + + return annotation; + } +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/ComponentInitializer.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/ComponentInitializer.java index d57ab6d20..481886b99 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/ComponentInitializer.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/ComponentInitializer.java @@ -3,6 +3,7 @@ package com.yomahub.liteflow.core; import cn.hutool.core.annotation.AnnotationUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.yomahub.liteflow.annotation.AnnoUtil; import com.yomahub.liteflow.annotation.LiteflowRetry; import com.yomahub.liteflow.common.ChainConstant; import com.yomahub.liteflow.enums.NodeTypeEnum; @@ -53,7 +54,7 @@ public class ComponentInitializer { // 先从组件上取@RetryCount标注,如果没有,则看全局配置,全局配置如果不配置的话,默认是0 // 默认retryForExceptions为Exception.class - LiteflowRetry liteFlowRetryAnnotation = AnnotationUtil.getAnnotationAlias(nodeComponent.getClass(), LiteflowRetry.class); + LiteflowRetry liteFlowRetryAnnotation = AnnoUtil.getAnnotation(nodeComponent.getClass(), LiteflowRetry.class); LiteflowConfig liteflowConfig = LiteflowConfigGetter.get(); if (liteFlowRetryAnnotation != null) { nodeComponent.setRetryCount(liteFlowRetryAnnotation.retry()); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/slot/DataBus.java b/liteflow-core/src/main/java/com/yomahub/liteflow/slot/DataBus.java index e68f998a4..823d83baa 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/slot/DataBus.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/slot/DataBus.java @@ -13,6 +13,7 @@ import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.StrUtil; +import com.yomahub.liteflow.annotation.AnnoUtil; import com.yomahub.liteflow.context.ContextBean; import com.yomahub.liteflow.log.LFLog; import com.yomahub.liteflow.log.LFLoggerManager; @@ -83,7 +84,7 @@ public class DataBus { public static int offerSlotByBean(List contextList) { List contextBeanList = contextList.stream().filter(Objects::nonNull).map(object -> { - ContextBean contextBean = AnnotationUtil.getAnnotationAlias(object.getClass(), ContextBean.class); + ContextBean contextBean = AnnoUtil.getAnnotation(object.getClass(), ContextBean.class); String contextKey; if (contextBean != null && StrUtil.isNotBlank(contextBean.value())){ contextKey = contextBean.value(); diff --git a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/spi/solon/SolonDeclComponentParser.java b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/spi/solon/SolonDeclComponentParser.java index dcc613e02..76d4788fd 100644 --- a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/spi/solon/SolonDeclComponentParser.java +++ b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/spi/solon/SolonDeclComponentParser.java @@ -36,13 +36,13 @@ public class SolonDeclComponentParser implements DeclComponentParser { method -> AnnotationUtil.getAnnotation(method, LiteflowMethod.class) != null ).map(method -> { LiteflowMethod liteflowMethod = AnnotationUtil.getAnnotation(method, LiteflowMethod.class); - LiteflowRetry liteflowRetry = AnnotationUtil.getAnnotationAlias(method, LiteflowRetry.class); + LiteflowRetry liteflowRetry = AnnoUtil.getAnnotation(method, LiteflowRetry.class); String currNodeId = null; String currNodeName = null; if (nodeId == null){ if (StrUtil.isBlank(liteflowMethod.nodeId())){ - LiteflowComponent liteflowComponent = AnnotationUtil.getAnnotationAlias(clazz, LiteflowComponent.class); + LiteflowComponent liteflowComponent = AnnoUtil.getAnnotation(clazz, LiteflowComponent.class); Component component = AnnotationUtil.getAnnotation(clazz, Component.class); if(liteflowComponent != null){ diff --git a/liteflow-spring/src/main/java/com/yomahub/liteflow/process/impl/ScriptBeanProcess.java b/liteflow-spring/src/main/java/com/yomahub/liteflow/process/impl/ScriptBeanProcess.java index 67fd966d1..db15c04f3 100644 --- a/liteflow-spring/src/main/java/com/yomahub/liteflow/process/impl/ScriptBeanProcess.java +++ b/liteflow-spring/src/main/java/com/yomahub/liteflow/process/impl/ScriptBeanProcess.java @@ -2,6 +2,7 @@ package com.yomahub.liteflow.process.impl; import cn.hutool.core.annotation.AnnotationUtil; import cn.hutool.core.util.ObjectUtil; +import com.yomahub.liteflow.annotation.AnnoUtil; import com.yomahub.liteflow.process.LiteflowScannerProcessStep; import com.yomahub.liteflow.process.context.LiteflowScannerProcessStepContext; import com.yomahub.liteflow.process.enums.LiteflowScannerProcessStepEnum; @@ -24,7 +25,7 @@ public class ScriptBeanProcess implements LiteflowScannerProcessStep { public boolean filter(LiteflowScannerProcessStepContext ctx) { Class clazz = ctx.getClazz(); - ScriptBean outPut = AnnotationUtil.getAnnotationAlias(clazz, ScriptBean.class); + ScriptBean outPut = AnnoUtil.getAnnotation(clazz, ScriptBean.class); ctx.setOutPut(outPut); return ObjectUtil.isNotNull(outPut); diff --git a/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringDeclComponentParser.java b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringDeclComponentParser.java index fae560df0..092ff0e26 100644 --- a/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringDeclComponentParser.java +++ b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringDeclComponentParser.java @@ -38,7 +38,7 @@ public class SpringDeclComponentParser implements DeclComponentParser { method -> AnnotationUtil.getAnnotation(method, LiteflowMethod.class) != null ).map(method -> { LiteflowMethod liteflowMethod = AnnotationUtil.getAnnotation(method, LiteflowMethod.class); - LiteflowRetry liteflowRetry = AnnotationUtil.getAnnotationAlias(method, LiteflowRetry.class); + LiteflowRetry liteflowRetry = AnnoUtil.getAnnotation(method, LiteflowRetry.class); String currNodeId = null; String currNodeName = null;