From e3c8416606787842267d55a54912de727cbdb9ff Mon Sep 17 00:00:00 2001 From: "everywhere.z" Date: Mon, 28 Nov 2022 23:32:29 +0800 Subject: [PATCH] =?UTF-8?q?bug=20#I61HIO=20=E6=96=B9=E6=B3=95=E7=BA=A7?= =?UTF-8?q?=E7=9A=84=E7=BB=84=E4=BB=B6=E5=A3=B0=E6=98=8E=EF=BC=8C=E7=84=B6?= =?UTF-8?q?=E5=90=8E=E5=9C=A8=E6=96=B9=E6=B3=95=E4=B8=8A=E6=89=93=20Spring?= =?UTF-8?q?=20=E7=9A=84=E4=BA=8B=E5=8A=A1=E6=B3=A8=E8=A7=A3=20@Transaction?= =?UTF-8?q?al=EF=BC=8C=E4=BC=9A=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yomahub/liteflow/core/proxy/ComponentProxy.java | 9 ++++++--- .../java/com/yomahub/liteflow/enums/NodeTypeEnum.java | 5 +++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/proxy/ComponentProxy.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/proxy/ComponentProxy.java index 719d8379e..718eedc0b 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/proxy/ComponentProxy.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/proxy/ComponentProxy.java @@ -70,7 +70,7 @@ public class ComponentProxy { return methodListMap.entrySet().stream().map(entry -> { // 获取当前节点的原有注解,如:LiteFlowRetry 之类的规则注解 - Annotation[] beanClassAnnotation = bean.getClass().getAnnotations(); + Annotation[] beanClassAnnotation = beanClazz.getAnnotations(); // 如果entry的key为空字符串,则是为了兼容老版本的写法,即:没有指定nodeId的情况 // 判断是否是方法级创造节点 boolean isMethodCreate = !StrUtil.isEmpty(entry.getKey()); @@ -139,7 +139,7 @@ public class ComponentProxy { //被拦截的对象也根据被代理对象根据@LiteFlowMethod所标注的进行了动态判断 Object instance = new ByteBuddy().subclass(cmpClazz) .name(StrUtil.format("{}.ByteBuddy${}${}", - ClassUtil.getPackage(bean.getClass()), + ClassUtil.getPackage(beanClazz), activeNodeId, SerialsUtil.generateShortUUID())) .method(ElementMatchers.namedOneOf(methodList.stream().map(m -> m.value().getMethodName()).toArray(String[]::new))) @@ -163,8 +163,11 @@ public class ComponentProxy { private final Object bean; + private final Class clazz; + public AopInvocationHandler(Object bean) { this.bean = bean; + this.clazz = LiteFlowProxyUtil.getUserClass(bean.getClass()); } @Override @@ -172,7 +175,7 @@ public class ComponentProxy { //这里做了2件事情 //先是从普通的bean里过滤出含有@LiteFlowMethod这个标注的方法 //然后进行转换成LiteFlowMethodBean对象List,形成键值对的对象 - List liteFlowMethodBeanList = Arrays.stream(ReflectUtil.getMethods(bean.getClass())).filter(m -> { + List liteFlowMethodBeanList = Arrays.stream(ReflectUtil.getMethods(clazz)).filter(m -> { LiteflowMethod liteFlowMethod = m.getAnnotation(LiteflowMethod.class); return ObjectUtil.isNotNull(liteFlowMethod); }).filter(m -> { diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/enums/NodeTypeEnum.java b/liteflow-core/src/main/java/com/yomahub/liteflow/enums/NodeTypeEnum.java index 556c4e5d4..afca14b6f 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/enums/NodeTypeEnum.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/enums/NodeTypeEnum.java @@ -5,6 +5,7 @@ import cn.hutool.core.util.StrUtil; import com.yomahub.liteflow.annotation.LiteflowCmpDefine; import com.yomahub.liteflow.annotation.LiteflowMethod; import com.yomahub.liteflow.core.*; +import com.yomahub.liteflow.util.LiteFlowProxyUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -124,6 +125,10 @@ public enum NodeTypeEnum { } public static NodeTypeEnum guessType(Class clazz) { + if(LiteFlowProxyUtil.isCglibProxyClass(clazz)){ + clazz = LiteFlowProxyUtil.getUserClass(clazz); + } + NodeTypeEnum nodeType = guessTypeBySuperClazz(clazz); if (nodeType == null) { //尝试从类声明处进行推断