From 89400aa74d55f9d953a0877fcf7dd2e3c2d8a2a7 Mon Sep 17 00:00:00 2001 From: bryan31 Date: Thu, 22 Oct 2020 21:33:26 +0800 Subject: [PATCH] =?UTF-8?q?enhancement:=20#I1Z96F=20liteflow=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E7=BA=A7=E5=88=AB=E5=A2=9E=E5=8A=A0=E5=88=87=E9=9D=A2?= =?UTF-8?q?=E7=9A=84=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yomahub/liteflow/aop/ICmpAroundAspect.java | 17 +++++++++++++++++ .../yomahub/liteflow/core/NodeComponent.java | 11 +++++++++++ .../liteflow/spring/ComponentScaner.java | 12 ++++++++++++ .../flowtest/aspect/ComponentAspect.java | 18 ++++++++++++++++++ 4 files changed, 58 insertions(+) create mode 100644 liteflow-core/src/main/java/com/yomahub/liteflow/aop/ICmpAroundAspect.java create mode 100644 liteflow-test-springboot/src/main/java/com/yomahub/flowtest/aspect/ComponentAspect.java diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/aop/ICmpAroundAspect.java b/liteflow-core/src/main/java/com/yomahub/liteflow/aop/ICmpAroundAspect.java new file mode 100644 index 000000000..b0d2bc006 --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/aop/ICmpAroundAspect.java @@ -0,0 +1,17 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/10/22 + */ +package com.yomahub.liteflow.aop; + +import com.yomahub.liteflow.entity.data.Slot; + +public interface ICmpAroundAspect { + + void beforeProcess(Slot slot); + + void afterProcess(Slot slot); +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java index 852fa26c3..5e201756e 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java @@ -8,6 +8,7 @@ package com.yomahub.liteflow.core; import com.yomahub.liteflow.entity.flow.Executable; +import com.yomahub.liteflow.spring.ComponentScaner; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.StopWatch; import org.slf4j.Logger; @@ -40,8 +41,18 @@ public abstract class NodeComponent { StopWatch stopWatch = new StopWatch(); stopWatch.start(); + //process前置处理 + if(ComponentScaner.cmpAroundAspect != null){ + ComponentScaner.cmpAroundAspect.beforeProcess(slot); + } + process(); + //process后置处理 + if(ComponentScaner.cmpAroundAspect != null){ + ComponentScaner.cmpAroundAspect.afterProcess(slot); + } + stopWatch.stop(); long timeSpent = stopWatch.getTime(); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spring/ComponentScaner.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spring/ComponentScaner.java index 3a1ac1be9..a833bb171 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/spring/ComponentScaner.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spring/ComponentScaner.java @@ -9,6 +9,8 @@ package com.yomahub.liteflow.spring; import java.util.HashMap; import java.util.Map; + +import com.yomahub.liteflow.aop.ICmpAroundAspect; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; @@ -24,6 +26,8 @@ public class ComponentScaner implements BeanPostProcessor, PriorityOrdered { public static Map nodeComponentMap = new HashMap(); + public static ICmpAroundAspect cmpAroundAspect; + static { LOGOPrinter.print(); } @@ -37,12 +41,20 @@ public class ComponentScaner implements BeanPostProcessor, PriorityOrdered { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { Class clazz = bean.getClass(); + //组件的扫描发现 if(NodeComponent.class.isAssignableFrom(clazz)){ LOG.info("component[{}] has been found",beanName); NodeComponent nodeComponent = (NodeComponent)bean; nodeComponent.setNodeId(beanName); nodeComponentMap.put(beanName, nodeComponent); } + + //组件Aop的实现类加载 + if(ICmpAroundAspect.class.isAssignableFrom(clazz)){ + LOG.info("component aspect implement[{}] has been found",beanName); + cmpAroundAspect = (ICmpAroundAspect)bean; + } + return bean; } diff --git a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/aspect/ComponentAspect.java b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/aspect/ComponentAspect.java new file mode 100644 index 000000000..aba478de7 --- /dev/null +++ b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/aspect/ComponentAspect.java @@ -0,0 +1,18 @@ +package com.yomahub.flowtest.aspect; + +import com.yomahub.liteflow.aop.ICmpAroundAspect; +import com.yomahub.liteflow.entity.data.Slot; +import org.springframework.stereotype.Component; + +@Component +public class ComponentAspect implements ICmpAroundAspect { + @Override + public void beforeProcess(Slot slot) { + System.out.println("before process"); + } + + @Override + public void afterProcess(Slot slot) { + System.out.println("after process"); + } +}