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"); + } +}