diff --git a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeComponentOfMethod.java b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeComponentOfMethod.java new file mode 100644 index 000000000..74bc2f1df --- /dev/null +++ b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/NodeComponentOfMethod.java @@ -0,0 +1,70 @@ +package com.yomahub.liteflow.solon; + +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.enums.LiteFlowMethodEnum; +import com.yomahub.liteflow.slot.Slot; +import org.noear.solon.core.BeanWrap; + +import java.lang.reflect.Method; + +/** + * @author noear + * @since 1.11 + */ +public class NodeComponentOfMethod extends NodeComponent { + final BeanWrap beanWrap; + final Method method; + final LiteFlowMethodEnum methodEnum; + + public NodeComponentOfMethod(BeanWrap beanWrap, Method method, LiteFlowMethodEnum methodEnum) { + this.beanWrap = beanWrap; + this.method = method; + this.methodEnum = methodEnum; + } + + @Override + public void process() throws Exception { + if(methodEnum != LiteFlowMethodEnum.PROCESS){ + return; + } + + if (method.getParameterCount() == 0) { + method.invoke(beanWrap.get()); + } else if (method.getParameterCount() == 1) { + method.invoke(beanWrap.get(), this); + } else { + String methodFullName = beanWrap.clz().getName() + "::" + method.getName(); + throw new RuntimeException("NodeComponent method parameter cannot be more than one: " + methodFullName); + } + } + + + @Override + public void beforeProcess(String nodeId, Slot slot) { + if(methodEnum != LiteFlowMethodEnum.BEFORE_PROCESS){ + return; + } + } + + @Override + public void afterProcess(String nodeId, Slot slot) { + if(methodEnum != LiteFlowMethodEnum.AFTER_PROCESS){ + return; + } + } + + + @Override + public void onError() throws Exception { + if(methodEnum != LiteFlowMethodEnum.ON_ERROR){ + return; + } + } + + @Override + public void onSuccess() throws Exception { + if(methodEnum != LiteFlowMethodEnum.ON_SUCCESS){ + return; + } + } +} diff --git a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/integration/XPluginImpl.java b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/integration/XPluginImpl.java index 60947c8c4..49d24799c 100644 --- a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/integration/XPluginImpl.java +++ b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/integration/XPluginImpl.java @@ -1,9 +1,11 @@ package com.yomahub.liteflow.solon.integration; import com.yomahub.liteflow.annotation.LiteflowComponent; +import com.yomahub.liteflow.annotation.LiteflowMethod; import com.yomahub.liteflow.core.NodeComponent; import com.yomahub.liteflow.flow.FlowBus; import com.yomahub.liteflow.solon.LiteflowProperty; +import com.yomahub.liteflow.solon.NodeComponentOfMethod; import org.noear.solon.Utils; import org.noear.solon.core.AopContext; import org.noear.solon.core.Plugin; @@ -40,6 +42,15 @@ public class XPluginImpl implements Plugin { FlowBus.addSpringScanNode(bw.name(), bw.raw()); }); + context.beanExtractorAdd(LiteflowMethod.class, (bw, method, anno) -> { + NodeComponent node1 = new NodeComponentOfMethod(bw, method, anno.value()); + String nodeId = Utils.annoAlias(anno.nodeId(), bw.name()); + node1.setNodeId(nodeId); + node1.setType(anno.nodeType()); + + FlowBus.addSpringScanNode(bw.name(), node1); + }); + context.beanBuilderAdd(LiteflowComponent.class, (clz, bw, anno) -> { if(NodeComponent.class.isAssignableFrom(clz)) { NodeComponent node1 = bw.raw(); @@ -50,6 +61,8 @@ public class XPluginImpl implements Plugin { node1.setName(name1); FlowBus.addSpringScanNode(node1.getNodeId(), node1); + }else{ + context.beanExtract(bw); //尝试提取 LiteflowMethod 函数 } }); diff --git a/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/requestId/LiteflowRequestIdELSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/requestId/LiteflowRequestIdELSpringbootTest.java index 8f2f682fa..6470ba066 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/requestId/LiteflowRequestIdELSpringbootTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/requestId/LiteflowRequestIdELSpringbootTest.java @@ -16,7 +16,6 @@ import org.noear.solon.test.annotation.TestPropertySource; */ @RunWith(SolonJUnit4ClassRunner.class) @TestPropertySource(value = "classpath:/requestId/application.properties") -@Import(scanPackages = {"com.yomahub.liteflow.test.requestId.cmp"}) public class LiteflowRequestIdELSpringbootTest extends BaseTest { @Inject diff --git a/pom.xml b/pom.xml index 3873c389b..cebcbbc0b 100644 --- a/pom.xml +++ b/pom.xml @@ -65,7 +65,7 @@ 1.8.13 1.2.3 - 1.11.7 + 1.11.7-M1 4.1.84.Final 31.1-jre