diff --git a/liteflow-core/pom.xml b/liteflow-core/pom.xml
index a61ce18fb..f4ee22e05 100644
--- a/liteflow-core/pom.xml
+++ b/liteflow-core/pom.xml
@@ -23,26 +23,6 @@
cn.hutool
hutool-core
-
- org.springframework
- spring-beans
-
-
- org.springframework
- spring-context
-
-
- org.springframework
- spring-aop
-
-
- org.springframework
- spring-expression
-
-
- org.springframework
- spring-test
-
org.slf4j
slf4j-api
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/AliasFor.java b/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/AliasFor.java
new file mode 100644
index 000000000..06b3c58c4
--- /dev/null
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/AliasFor.java
@@ -0,0 +1,11 @@
+package com.yomahub.liteflow.annotation;
+
+import java.lang.annotation.*;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+@Documented
+public @interface AliasFor {
+
+ String value() default "";
+}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/LiteflowRetry.java b/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/LiteflowRetry.java
index 26c7e4032..7f4ca10ea 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/LiteflowRetry.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/LiteflowRetry.java
@@ -1,7 +1,5 @@
package com.yomahub.liteflow.annotation;
-import org.springframework.core.annotation.AliasFor;
-
import java.lang.annotation.*;
/**
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/util/AnnoUtil.java b/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/util/AnnoUtil.java
new file mode 100644
index 000000000..a7af0f06d
--- /dev/null
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/util/AnnoUtil.java
@@ -0,0 +1,50 @@
+package com.yomahub.liteflow.annotation.util;
+
+import cn.hutool.core.annotation.AnnotationUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.ReflectUtil;
+import com.yomahub.liteflow.annotation.AliasFor;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.AnnotatedElement;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+public class AnnoUtil {
+
+ public static A getAnnotation(AnnotatedElement annotatedElement, Class annotationType) {
+ A annotation = AnnotationUtil.getAnnotation(annotatedElement, annotationType);
+ if (ObjectUtil.isNull(annotation)){
+ return null;
+ }
+
+ Map aliasMap = new HashMap<>();
+ Map defaultValueMap = new HashMap<>();
+ Arrays.stream(ReflectUtil.getMethods(annotationType)).forEach(method -> {
+ AliasFor aliasFor = AnnotationUtil.getAnnotation(method, AliasFor.class);
+ if (ObjectUtil.isNotNull(aliasFor)){
+ aliasMap.put(method.getName(), aliasFor.value());
+ defaultValueMap.put(method.getName(), getDefaultValue(annotationType, method.getName()));
+ }
+ });
+
+ aliasMap.forEach((key, value1) -> {
+ Object value = ReflectUtil.invoke(annotation, key);
+ Object defaultValue = defaultValueMap.get(key);
+ if (ObjectUtil.notEqual(value, defaultValue)) {
+ AnnotationUtil.setValue(annotation, value1, value);
+ }
+ });
+
+ return annotation;
+ }
+
+ public static Object getDefaultValue(Class annotationType, String property){
+ try{
+ return annotationType.getMethod(property).getDefaultValue();
+ }catch (Exception e){
+ return null;
+ }
+ }
+}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/builder/LiteFlowConditionBuilder.java b/liteflow-core/src/main/java/com/yomahub/liteflow/builder/LiteFlowConditionBuilder.java
index 9c7178dd5..f9f4aed2f 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/builder/LiteFlowConditionBuilder.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/builder/LiteFlowConditionBuilder.java
@@ -11,7 +11,7 @@ import com.yomahub.liteflow.exception.ExecutableItemNotFoundException;
import com.yomahub.liteflow.flow.FlowBus;
import com.yomahub.liteflow.parser.RegexEntity;
import com.yomahub.liteflow.parser.RegexNodeEntity;
-import com.yomahub.liteflow.util.SpringAware;
+import com.yomahub.liteflow.spi.factory.ContextAwareFactory;
import java.util.ArrayList;
@@ -88,7 +88,7 @@ public class LiteFlowConditionBuilder {
this.condition.getNodeList().add(chain);
} else {
//元数据没有的话,从spring上下文再取一遍,这部分是为了防止标有@Lazy懒加载的组件
- NodeComponent nodeComponent = SpringAware.getBean(item.getId());
+ NodeComponent nodeComponent = ContextAwareFactory.loadContextAware().getBean(item.getId());
if (ObjectUtil.isNotNull(nodeComponent)){
FlowBus.addSpringScanNode(item.getId(), nodeComponent);
return setValue(value);
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 c858050ce..581855868 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
@@ -2,13 +2,13 @@ package com.yomahub.liteflow.core;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
-import com.yomahub.liteflow.annotation.LiteflowComponent;
import com.yomahub.liteflow.annotation.LiteflowRetry;
+import com.yomahub.liteflow.annotation.util.AnnoUtil;
import com.yomahub.liteflow.entity.executor.NodeExecutor;
import com.yomahub.liteflow.enums.NodeTypeEnum;
import com.yomahub.liteflow.property.LiteflowConfig;
import com.yomahub.liteflow.property.LiteflowConfigGetter;
-import org.springframework.core.annotation.AnnotationUtils;
+import com.yomahub.liteflow.spi.factory.LiteflowComponentSupportFactory;
/**
* 组件初始化器
@@ -31,23 +31,17 @@ public class ComponentInitializer {
nodeComponent.setSelf(nodeComponent);
nodeComponent.setType(type);
- //先取传进来的name值(配置文件中配置的),再看有没有配置LiteflowComponent标注
+ //先取传进来的name值(配置文件中配置的),再看有没有配置@LiteflowComponent标注
+ //@LiteflowComponent标注只在spring体系下生效,这里用了spi机制取到相应环境下的实现类
nodeComponent.setName(desc);
if (nodeComponent.getType().equals(NodeTypeEnum.COMMON) && StrUtil.isBlank(nodeComponent.getName())){
- //判断NodeComponent是否是标识了@LiteflowComponent的标注
- //如果标注了,那么要从中取到name字段
- LiteflowComponent liteflowComponent = nodeComponent.getClass().getAnnotation(LiteflowComponent.class);
- if (ObjectUtil.isNotNull(liteflowComponent)) {
- String name = liteflowComponent.name();
- if (StrUtil.isNotBlank(name)) {
- nodeComponent.setName(name);
- }
- }
+ String name = LiteflowComponentSupportFactory.loadLiteflowComponentSupport().getCmpName(nodeComponent);
+ nodeComponent.setName(name);
}
//先从组件上取@RetryCount标注,如果没有,则看全局配置,全局配置如果不配置的话,默认是0
//默认retryForExceptions为Exception.class
- LiteflowRetry liteflowRetryAnnotation = AnnotationUtils.getAnnotation(nodeComponent.getClass(), LiteflowRetry.class);
+ LiteflowRetry liteflowRetryAnnotation = AnnoUtil.getAnnotation(nodeComponent.getClass(), LiteflowRetry.class);
LiteflowConfig liteflowConfig = LiteflowConfigGetter.get();
if (ObjectUtil.isNotNull(liteflowRetryAnnotation)) {
nodeComponent.setRetryCount(liteflowRetryAnnotation.retry());
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java
index 049522bc0..41192c7d4 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java
@@ -18,7 +18,7 @@ import com.yomahub.liteflow.enums.FlowParserTypeEnum;
import com.yomahub.liteflow.exception.*;
import com.yomahub.liteflow.parser.*;
import com.yomahub.liteflow.property.LiteflowConfig;
-import com.yomahub.liteflow.util.SpringAware;
+import com.yomahub.liteflow.spi.factory.ContextAwareFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -175,11 +175,11 @@ public class FlowExecutor {
Class> c = Class.forName(path);
switch (pattern) {
case TYPE_XML:
- return (XmlFlowParser) SpringAware.registerBean(c);
+ return (XmlFlowParser) ContextAwareFactory.loadContextAware().registerBean(c);
case TYPE_JSON:
- return (JsonFlowParser) SpringAware.registerBean(c);
+ return (JsonFlowParser) ContextAwareFactory.loadContextAware().registerBean(c);
case TYPE_YML:
- return (YmlFlowParser) SpringAware.registerBean(c);
+ return (YmlFlowParser) ContextAwareFactory.loadContextAware().registerBean(c);
default:
}
} else if (isZKConfig(path)) {
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 745cc470d..b1b4dae59 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
@@ -14,9 +14,10 @@ import com.alibaba.ttl.TransmittableThreadLocal;
import com.yomahub.liteflow.entity.executor.NodeExecutor;
import com.yomahub.liteflow.entity.executor.DefaultNodeExecutor;
import com.yomahub.liteflow.enums.NodeTypeEnum;
+import com.yomahub.liteflow.spi.factory.CmpAroundAspectFactory;
+import com.yomahub.liteflow.spi.factory.ContextAwareFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
import com.yomahub.liteflow.entity.data.CmpStep;
import com.yomahub.liteflow.entity.data.CmpStepType;
@@ -25,7 +26,6 @@ import com.yomahub.liteflow.entity.data.Slot;
import com.yomahub.liteflow.entity.flow.Executable;
import com.yomahub.liteflow.entity.monitor.CompStatistics;
import com.yomahub.liteflow.monitor.MonitorBus;
-import com.yomahub.liteflow.spring.ComponentScanner;
import java.util.Map;
@@ -39,7 +39,6 @@ public abstract class NodeComponent{
private final TransmittableThreadLocal slotIndexTL = new TransmittableThreadLocal<>();
- @Autowired(required = false)
private MonitorBus monitorBus;
private final TransmittableThreadLocal tagTL = new TransmittableThreadLocal<>();
@@ -69,16 +68,23 @@ public abstract class NodeComponent{
//是否结束整个流程,这个只对串行流程有效,并行流程无效
private final TransmittableThreadLocal isEndTL = new TransmittableThreadLocal<>();
+ public NodeComponent() {
+ monitorBus = ContextAwareFactory.loadContextAware().getBean(MonitorBus.class);
+ }
+
public void execute() throws Exception{
Slot slot = this.getSlot();
LOG.info("[{}]:[O]start component[{}] execution",slot.getRequestId(),this.getClass().getSimpleName());
slot.addStep(new CmpStep(nodeId, name, CmpStepType.SINGLE));
+
StopWatch stopWatch = new StopWatch();
stopWatch.start();
- self.beforeProcess(this.getNodeId(), slot);
+ //全局切面只在spring体系下生效,这里用了spi机制取到相应环境下的实现类
+ //非spring环境下,全局切面为空实现
+ CmpAroundAspectFactory.loadCmpAroundAspect().beforeProcess(this.getNodeId(), slot);
self.process();
- self.afterProcess(this.getNodeId(), slot);
+ CmpAroundAspectFactory.loadCmpAroundAspect().afterProcess(this.getNodeId(), slot);
stopWatch.stop();
@@ -104,21 +110,6 @@ public abstract class NodeComponent{
public abstract void process() throws Exception;
- //process前置处理
- public void beforeProcess(String nodeId, Slot slot) {
- if (ObjectUtil.isNotNull(ComponentScanner.cmpAroundAspect)) {
- ComponentScanner.cmpAroundAspect.beforeProcess(nodeId, slot);
- }
- }
-
- //process后置处理
- public void afterProcess(String nodeId, Slot slot) {
- if (ObjectUtil.isNotNull(ComponentScanner.cmpAroundAspect)) {
- ComponentScanner.cmpAroundAspect.afterProcess(nodeId, slot);
- }
- }
-
-
//是否进入该节点
public boolean isAccess(){
return true;
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/executor/NodeExecutorHelper.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/executor/NodeExecutorHelper.java
index 5c3017aaf..2ce9552fb 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/executor/NodeExecutorHelper.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/executor/NodeExecutorHelper.java
@@ -1,10 +1,8 @@
package com.yomahub.liteflow.entity.executor;
import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.ReflectUtil;
import com.google.common.collect.Maps;
-import com.yomahub.liteflow.util.SpringAware;
-import org.apache.commons.lang.StringUtils;
+import com.yomahub.liteflow.spi.factory.ContextAwareFactory;
import java.util.Map;
@@ -43,7 +41,7 @@ public class NodeExecutorHelper {
// 此处无需使用同步锁进行同步-因为即使同时创建了两个实例,但是添加到缓存中的只会存在一个且不会存在并发问题-具体是由ConcurrentMap保证
if (ObjectUtil.isNull(nodeExecutor)) {
// 获取重试执行器实例
- nodeExecutor = SpringAware.registerBean(nodeExecutorClass);
+ nodeExecutor = ContextAwareFactory.loadContextAware().registerBean(nodeExecutorClass);
// 缓存
nodeExecutorMap.put(nodeExecutorClass, nodeExecutor);
}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java
index 886638592..1c3f18d39 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java
@@ -18,29 +18,21 @@ import com.yomahub.liteflow.core.ScriptComponent;
import com.yomahub.liteflow.core.ScriptCondComponent;
import com.yomahub.liteflow.entity.data.DataBus;
import com.yomahub.liteflow.entity.flow.Chain;
-import com.yomahub.liteflow.entity.flow.Condition;
import com.yomahub.liteflow.entity.flow.Node;
import com.yomahub.liteflow.enums.FlowParserTypeEnum;
import com.yomahub.liteflow.enums.NodeTypeEnum;
import com.yomahub.liteflow.exception.ComponentCannotRegisterException;
-import com.yomahub.liteflow.exception.NodeTypeNotSupportException;
import com.yomahub.liteflow.parser.LocalJsonFlowParser;
import com.yomahub.liteflow.parser.LocalXmlFlowParser;
import com.yomahub.liteflow.parser.LocalYmlFlowParser;
-import com.yomahub.liteflow.property.LiteflowConfig;
-import com.yomahub.liteflow.property.LiteflowConfigGetter;
import com.yomahub.liteflow.script.ScriptExecutor;
import com.yomahub.liteflow.script.ScriptExecutorFactory;
import com.yomahub.liteflow.script.exception.ScriptSpiException;
+import com.yomahub.liteflow.spi.factory.ContextAwareFactory;
import com.yomahub.liteflow.util.CopyOnWriteHashMap;
-import com.yomahub.liteflow.util.SpringAware;
-import org.checkerframework.checker.units.qual.C;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.util.SerializationUtils;
-import java.util.HashMap;
-import java.util.List;
import java.util.Map;
/**
@@ -114,7 +106,7 @@ public class FlowBus {
//如果是script类型的节点,因为class只有一个,所以也不能注册进spring上下文,注册的时候需要new Instance
NodeComponent cmpInstance = null;
if (!CollectionUtil.newArrayList(NodeTypeEnum.SCRIPT, NodeTypeEnum.COND_SCRIPT).contains(type)){
- cmpInstance = SpringAware.registerOrGet(nodeId, cmpClazz);
+ cmpInstance = ContextAwareFactory.loadContextAware().registerOrGet(nodeId, cmpClazz);
}
if (ObjectUtil.isNull(cmpInstance)) {
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/FlowParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/FlowParser.java
index 9b50230b6..3400b3e3b 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/FlowParser.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/FlowParser.java
@@ -1,19 +1,5 @@
package com.yomahub.liteflow.parser;
-import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.collection.ListUtil;
-import cn.hutool.core.io.FileUtil;
-import cn.hutool.core.util.ArrayUtil;
-import com.google.common.collect.Lists;
-import com.yomahub.liteflow.entity.flow.*;
-import com.yomahub.liteflow.enums.ConditionTypeEnum;
-import com.yomahub.liteflow.exception.ConfigErrorException;
-import org.springframework.core.io.Resource;
-import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
-import org.springframework.util.Assert;
-import org.springframework.util.ResourceUtils;
-
-import java.io.IOException;
import java.util.*;
/**
@@ -21,46 +7,10 @@ import java.util.*;
* @author guodongqing
* @since 2.5.0
*/
-public abstract class FlowParser {
+public interface FlowParser {
- public abstract void parseMain(List pathList) throws Exception;
+ void parseMain(List pathList) throws Exception;
- public abstract void parse(List contentList) throws Exception;
+ void parse(List contentList) throws Exception;
- //根据配置的ruleSource查找匹配的资源
- protected Resource[] matchRuleResources(final List pathList) throws IOException {
- Assert.notEmpty(pathList, "rule source must not be null");
-
- List allResource = new ArrayList<>();
- for (String path : pathList) {
- String locationPattern;
-
- //如果path是绝对路径且这个文件存在时,我们认为这是一个本地文件路径,而并非classpath路径
- if (FileUtil.isAbsolutePath(path) && FileUtil.isFile(path)){
- locationPattern = ResourceUtils.FILE_URL_PREFIX + path;
- } else {
- if (!path.startsWith(ResourceUtils.CLASSPATH_URL_PREFIX)) {
- locationPattern = ResourceUtils.CLASSPATH_URL_PREFIX + path;
- }else{
- locationPattern = path;
- }
- }
-
- PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
- Resource[] resources = resolver.getResources(locationPattern);
- if (ArrayUtil.isEmpty(resources)) {
- throw new ConfigErrorException("config error,please check rule source property");
- }
- allResource.addAll(ListUtil.toList(resources));
- }
-
- //如果有多个资源,检查资源都是同一个类型,如果出现不同类型的配置,则抛出错误提示
- Set fileTypeSet = new HashSet<>();
- allResource.forEach(resource -> fileTypeSet.add(FileUtil.extName(resource.getFilename())));
- if (fileTypeSet.size() != 1) {
- throw new ConfigErrorException("config error,please use the same type of configuration");
- }
-
- return allResource.toArray(new Resource[]{});
- }
}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/JsonFlowParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/JsonFlowParser.java
index 48de2c2e2..03be3d6b9 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/JsonFlowParser.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/JsonFlowParser.java
@@ -10,17 +10,15 @@ import com.alibaba.fastjson.parser.Feature;
import com.yomahub.liteflow.builder.LiteFlowChainBuilder;
import com.yomahub.liteflow.builder.LiteFlowConditionBuilder;
import com.yomahub.liteflow.builder.LiteFlowNodeBuilder;
-import com.yomahub.liteflow.core.NodeComponent;
import com.yomahub.liteflow.enums.ConditionTypeEnum;
import com.yomahub.liteflow.enums.NodeTypeEnum;
import com.yomahub.liteflow.exception.EmptyConditionValueException;
import com.yomahub.liteflow.exception.NodeTypeNotSupportException;
import com.yomahub.liteflow.exception.NotSupportConditionException;
import com.yomahub.liteflow.flow.FlowBus;
-import com.yomahub.liteflow.spring.ComponentScanner;
+import com.yomahub.liteflow.spi.factory.ContextCmpInitFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
import java.util.*;
/**
@@ -29,7 +27,7 @@ import java.util.*;
* @author guodongqing
* @since 2.5.0
*/
-public abstract class JsonFlowParser extends FlowParser {
+public abstract class JsonFlowParser implements FlowParser {
private final Logger LOG = LoggerFactory.getLogger(JsonFlowParser.class);
@@ -55,11 +53,10 @@ public abstract class JsonFlowParser extends FlowParser {
//json格式,解析过程
public void parseJsonObject(List flowJsonObjectList) throws Exception {
- for (Map.Entry componentEntry : ComponentScanner.nodeComponentMap.entrySet()) {
- if (!FlowBus.containNode(componentEntry.getKey())) {
- FlowBus.addSpringScanNode(componentEntry.getKey(), componentEntry.getValue());
- }
- }
+ //在相应的环境下进行节点的初始化工作
+ //在spring体系下会获得spring扫描后的节点,接入元数据
+ //在非spring体系下是一个空实现,等于不做此步骤
+ ContextCmpInitFactory.loadContextCmpInit().initCmp();
//先在元数据里放上chain
//先放有一个好处,可以在parse的时候先映射到FlowBus的chainMap,然后再去解析
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalJsonFlowParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalJsonFlowParser.java
index b53bdcbbd..6a313eebd 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalJsonFlowParser.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalJsonFlowParser.java
@@ -1,10 +1,6 @@
package com.yomahub.liteflow.parser;
-import cn.hutool.core.collection.ListUtil;
-import cn.hutool.core.io.IoUtil;
-import cn.hutool.core.util.CharsetUtil;
-import cn.hutool.core.util.StrUtil;
-import org.springframework.core.io.Resource;
+import com.yomahub.liteflow.spi.factory.PathContentParserFactory;
import java.util.List;
@@ -16,14 +12,7 @@ public class LocalJsonFlowParser extends JsonFlowParser{
@Override
public void parseMain(List pathList) throws Exception {
- Resource[] resources = matchRuleResources(pathList);
- List contentList = ListUtil.toList();
- for (Resource resource : resources) {
- String content = IoUtil.read(resource.getInputStream(), CharsetUtil.CHARSET_UTF_8);
- if (StrUtil.isNotBlank(content)){
- contentList.add(content);
- }
- }
+ List contentList = PathContentParserFactory.loadContextAware().parseContent(pathList);
parse(contentList);
}
}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalXmlFlowParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalXmlFlowParser.java
index 5a8d73130..f55a31ef7 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalXmlFlowParser.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalXmlFlowParser.java
@@ -7,11 +7,7 @@
*/
package com.yomahub.liteflow.parser;
-import cn.hutool.core.collection.ListUtil;
-import cn.hutool.core.io.IoUtil;
-import cn.hutool.core.util.CharsetUtil;
-import cn.hutool.core.util.StrUtil;
-import org.springframework.core.io.Resource;
+import com.yomahub.liteflow.spi.factory.PathContentParserFactory;
import java.util.List;
@@ -22,14 +18,7 @@ import java.util.List;
public class LocalXmlFlowParser extends XmlFlowParser{
public void parseMain(List pathList) throws Exception {
- Resource[] resources = matchRuleResources(pathList);
- List contentList = ListUtil.toList();
- for (Resource resource : resources) {
- String content = IoUtil.read(resource.getInputStream(), CharsetUtil.CHARSET_UTF_8);
- if (StrUtil.isNotBlank(content)){
- contentList.add(content);
- }
- }
+ List contentList = PathContentParserFactory.loadContextAware().parseContent(pathList);
parse(contentList);
}
}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalYmlFlowParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalYmlFlowParser.java
index bf7c16e62..ff0be7942 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalYmlFlowParser.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalYmlFlowParser.java
@@ -1,10 +1,6 @@
package com.yomahub.liteflow.parser;
-import cn.hutool.core.collection.ListUtil;
-import cn.hutool.core.io.IoUtil;
-import cn.hutool.core.util.CharsetUtil;
-import cn.hutool.core.util.StrUtil;
-import org.springframework.core.io.Resource;
+import com.yomahub.liteflow.spi.factory.PathContentParserFactory;
import java.util.List;
@@ -18,14 +14,7 @@ public class LocalYmlFlowParser extends YmlFlowParser {
@Override
public void parseMain(List pathList) throws Exception {
- Resource[] resources = matchRuleResources(pathList);
- List contentList = ListUtil.toList();
- for (Resource resource : resources) {
- String content = IoUtil.read(resource.getInputStream(), CharsetUtil.CHARSET_UTF_8);
- if (StrUtil.isNotBlank(content)){
- contentList.add(content);
- }
- }
+ List contentList = PathContentParserFactory.loadContextAware().parseContent(pathList);
parse(contentList);
}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/XmlFlowParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/XmlFlowParser.java
index 26e74963c..a7a330bfc 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/XmlFlowParser.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/XmlFlowParser.java
@@ -7,27 +7,24 @@ import cn.hutool.core.util.StrUtil;
import com.yomahub.liteflow.builder.LiteFlowChainBuilder;
import com.yomahub.liteflow.builder.LiteFlowConditionBuilder;
import com.yomahub.liteflow.builder.LiteFlowNodeBuilder;
-import com.yomahub.liteflow.core.NodeComponent;
import com.yomahub.liteflow.enums.ConditionTypeEnum;
import com.yomahub.liteflow.enums.NodeTypeEnum;
import com.yomahub.liteflow.exception.*;
import com.yomahub.liteflow.flow.FlowBus;
-import com.yomahub.liteflow.spring.ComponentScanner;
+import com.yomahub.liteflow.spi.factory.ContextCmpInitFactory;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
import java.util.Iterator;
import java.util.List;
-import java.util.Map.Entry;
/**
* xml形式的解析器
* @author Bryan.Zhang
*/
-public abstract class XmlFlowParser extends FlowParser {
+public abstract class XmlFlowParser implements FlowParser {
private final Logger LOG = LoggerFactory.getLogger(XmlFlowParser.class);
@@ -49,12 +46,10 @@ public abstract class XmlFlowParser extends FlowParser {
//xml形式的主要解析过程
public void parseDocument(List documentList) throws Exception {
- //先进行Spring上下文中的节点的判断
- for (Entry componentEntry : ComponentScanner.nodeComponentMap.entrySet()) {
- if (!FlowBus.containNode(componentEntry.getKey())) {
- FlowBus.addSpringScanNode(componentEntry.getKey(), componentEntry.getValue());
- }
- }
+ //在相应的环境下进行节点的初始化工作
+ //在spring体系下会获得spring扫描后的节点,接入元数据
+ //在非spring体系下是一个空实现,等于不做此步骤
+ ContextCmpInitFactory.loadContextCmpInit().initCmp();
//先在元数据里放上chain
//先放有一个好处,可以在parse的时候先映射到FlowBus的chainMap,然后再去解析
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/property/LiteflowConfigGetter.java b/liteflow-core/src/main/java/com/yomahub/liteflow/property/LiteflowConfigGetter.java
index 3e5b683cf..6ef347d55 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/property/LiteflowConfigGetter.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/property/LiteflowConfigGetter.java
@@ -1,22 +1,31 @@
package com.yomahub.liteflow.property;
import cn.hutool.core.util.ObjectUtil;
-import com.yomahub.liteflow.util.SpringAware;
+import com.yomahub.liteflow.spi.factory.ContextAwareFactory;
/**
* liteflow的配置获取器
*/
public class LiteflowConfigGetter {
+ private static LiteflowConfig liteflowConfig;
+
public static LiteflowConfig get(){
- LiteflowConfig liteflowConfig = SpringAware.getBean(LiteflowConfig.class);
- //这里liteflowConfig不可能为null
- //如果在springboot环境,由于自动装配,所以不可能为null
- //在spring环境,如果xml没配置,在FlowExecutor的init时候就已经报错了
- //只有在非spring环境下,是为null
if (ObjectUtil.isNull(liteflowConfig)){
- liteflowConfig = new LiteflowConfig();
+ liteflowConfig = ContextAwareFactory.loadContextAware().getBean(LiteflowConfig.class);
+ //这里liteflowConfig不可能为null
+ //如果在springboot环境,由于自动装配,所以不可能为null
+ //在spring环境,如果xml没配置,在FlowExecutor的init时候就已经报错了
+ //只有在非spring环境下,是为null
+ if (ObjectUtil.isNull(liteflowConfig)){
+ liteflowConfig = new LiteflowConfig();
+ }
}
+
return liteflowConfig;
}
+
+ public static void clean(){
+ liteflowConfig = null;
+ }
}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/CmpAroundAspect.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/CmpAroundAspect.java
new file mode 100644
index 000000000..550b89d83
--- /dev/null
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/CmpAroundAspect.java
@@ -0,0 +1,15 @@
+package com.yomahub.liteflow.spi;
+
+import com.yomahub.liteflow.entity.data.Slot;
+
+/**
+ * 组件全局切面spi接口
+ * @author Bryan.Zhang
+ * @since 2.6.11
+ */
+public interface CmpAroundAspect extends SpiPriority {
+
+ void beforeProcess(String nodeId, Slot slot);
+
+ void afterProcess(String nodeId, Slot slot);
+}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/ContextAware.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/ContextAware.java
new file mode 100644
index 000000000..d313f8575
--- /dev/null
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/ContextAware.java
@@ -0,0 +1,20 @@
+package com.yomahub.liteflow.spi;
+
+/**
+ * 环境容器SPI接口
+ *
+ * @author Bryan.Zhang
+ * @since 2.6.11
+ */
+public interface ContextAware extends SpiPriority {
+
+ T getBean(String name);
+
+ T getBean(Class clazz);
+
+ T registerBean(String beanName, Class clazz);
+
+ T registerBean(Class clazz);
+
+ T registerOrGet(String beanName, Class clazz);
+}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/ContextCmpInit.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/ContextCmpInit.java
new file mode 100644
index 000000000..0c82bb8d8
--- /dev/null
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/ContextCmpInit.java
@@ -0,0 +1,13 @@
+package com.yomahub.liteflow.spi;
+
+/**
+ * 环境容器中组件初始化SPI接口
+ * 分2个,非spring环境下的实现和spring体系下的实现
+ *
+ * @author Bryan.Zhang
+ * @since 2.6.11
+ */
+public interface ContextCmpInit extends SpiPriority {
+
+ void initCmp();
+}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/LiteflowComponentSupport.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/LiteflowComponentSupport.java
new file mode 100644
index 000000000..da3790250
--- /dev/null
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/LiteflowComponentSupport.java
@@ -0,0 +1,15 @@
+package com.yomahub.liteflow.spi;
+
+import com.yomahub.liteflow.core.NodeComponent;
+
+/**
+ * LiteflowComponent注解处理器SPI接口
+ *
+ * @author Bryan.Zhang
+ * @since 2.6.11
+ */
+public interface LiteflowComponentSupport extends SpiPriority {
+
+ String getCmpName(NodeComponent nodeComponent);
+
+}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/PathContentParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/PathContentParser.java
new file mode 100644
index 000000000..10682a487
--- /dev/null
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/PathContentParser.java
@@ -0,0 +1,8 @@
+package com.yomahub.liteflow.spi;
+
+import java.util.List;
+
+public interface PathContentParser extends SpiPriority{
+
+ List parseContent(List pathList) throws Exception;
+}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/SpiPriority.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/SpiPriority.java
new file mode 100644
index 000000000..5a165d266
--- /dev/null
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/SpiPriority.java
@@ -0,0 +1,12 @@
+package com.yomahub.liteflow.spi;
+
+/**
+ * Spi实现的优先级接口
+ * 数字越小优先级越高
+ * @author Bryan.Zhang
+ * @since 2.6.11
+ */
+public interface SpiPriority {
+
+ int priority();
+}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/CmpAroundAspectFactory.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/CmpAroundAspectFactory.java
new file mode 100644
index 000000000..6f4bbd284
--- /dev/null
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/CmpAroundAspectFactory.java
@@ -0,0 +1,33 @@
+package com.yomahub.liteflow.spi.factory;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.yomahub.liteflow.spi.CmpAroundAspect;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.ServiceLoader;
+
+/**
+ * 组件全局拦截器SPI工厂类
+ * @author Bryan.Zhang
+ * @since 2.6.11
+ */
+public class CmpAroundAspectFactory {
+
+ private static CmpAroundAspect cmpAroundAspect;
+
+ public static CmpAroundAspect loadCmpAroundAspect(){
+ if (ObjectUtil.isNull(cmpAroundAspect)){
+ List list = new ArrayList<>();
+ ServiceLoader.load(CmpAroundAspect.class).forEach(list::add);
+ list.sort(Comparator.comparingInt(CmpAroundAspect::priority));
+ cmpAroundAspect = list.get(0);
+ }
+ return cmpAroundAspect;
+ }
+
+ public static void clean(){
+ cmpAroundAspect = null;
+ }
+}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/ContextAwareFactory.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/ContextAwareFactory.java
new file mode 100644
index 000000000..d2e332d5e
--- /dev/null
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/ContextAwareFactory.java
@@ -0,0 +1,34 @@
+package com.yomahub.liteflow.spi.factory;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.yomahub.liteflow.spi.ContextAware;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.ServiceLoader;
+
+/**
+ * 环境容器SPI工厂类
+ * 在spring体系下会获得spring的上下文包装实现
+ * @author Bryan.Zhang
+ * @since 2.6.11
+ */
+public class ContextAwareFactory {
+
+ private static ContextAware contextAware;
+
+ public static ContextAware loadContextAware(){
+ if (ObjectUtil.isNull(contextAware)){
+ List list = new ArrayList<>();
+ ServiceLoader.load(ContextAware.class).forEach(list::add);
+ list.sort(Comparator.comparingInt(ContextAware::priority));
+ contextAware = list.get(0);
+ }
+ return contextAware;
+ }
+
+ public static void clean(){
+ contextAware = null;
+ }
+}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/ContextCmpInitFactory.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/ContextCmpInitFactory.java
new file mode 100644
index 000000000..0779ba30f
--- /dev/null
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/ContextCmpInitFactory.java
@@ -0,0 +1,33 @@
+package com.yomahub.liteflow.spi.factory;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.yomahub.liteflow.spi.ContextCmpInit;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.ServiceLoader;
+
+/**
+ * 环境组件初始化SPI工厂类
+ * 在spring体系下会获得基于spring扫描的组件初始化实现器
+ * @author Bryan.Zhang
+ * @since 2.6.11
+ */
+public class ContextCmpInitFactory {
+
+ private static ContextCmpInit contextCmpInit;
+
+ public static ContextCmpInit loadContextCmpInit(){
+ if (ObjectUtil.isNull(contextCmpInit)){
+ List list = new ArrayList<>();
+ ServiceLoader.load(ContextCmpInit.class).forEach(list::add);
+ list.sort(Comparator.comparingInt(ContextCmpInit::priority));
+ contextCmpInit = list.get(0);
+ }
+ return contextCmpInit;
+ }
+
+ public static void clean(){
+ contextCmpInit = null;
+ }
+}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/LiteflowComponentSupportFactory.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/LiteflowComponentSupportFactory.java
new file mode 100644
index 000000000..159ca7bda
--- /dev/null
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/LiteflowComponentSupportFactory.java
@@ -0,0 +1,32 @@
+package com.yomahub.liteflow.spi.factory;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.yomahub.liteflow.spi.LiteflowComponentSupport;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.ServiceLoader;
+
+/**
+ * liteflowComponent的支持扩展SPI工厂类
+ * @author Bryan.Zhang
+ * @since 2.6.11
+ */
+public class LiteflowComponentSupportFactory {
+
+ private static LiteflowComponentSupport liteflowComponentSupport;
+
+ public static LiteflowComponentSupport loadLiteflowComponentSupport(){
+ if (ObjectUtil.isNull(liteflowComponentSupport)){
+ List list = new ArrayList<>();
+ ServiceLoader.load(LiteflowComponentSupport.class).forEach(list::add);
+ list.sort(Comparator.comparingInt(LiteflowComponentSupport::priority));
+ liteflowComponentSupport = list.get(0);
+ }
+ return liteflowComponentSupport;
+ }
+
+ public static void clean(){
+ liteflowComponentSupport = null;
+ }
+}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/PathContentParserFactory.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/PathContentParserFactory.java
new file mode 100644
index 000000000..707dbea5c
--- /dev/null
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/PathContentParserFactory.java
@@ -0,0 +1,31 @@
+package com.yomahub.liteflow.spi.factory;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.yomahub.liteflow.spi.ContextAware;
+import com.yomahub.liteflow.spi.PathContentParser;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.ServiceLoader;
+
+public class PathContentParserFactory {
+
+ private static PathContentParser pathContentParser;
+
+ public static PathContentParser loadContextAware(){
+ if (ObjectUtil.isNull(pathContentParser)){
+ List list = new ArrayList<>();
+ ServiceLoader.load(PathContentParser.class).forEach(list::add);
+ list.sort(Comparator.comparingInt(PathContentParser::priority));
+ pathContentParser = list.get(0);
+ }
+ return pathContentParser;
+ }
+
+ public static void clean(){
+ pathContentParser = null;
+ }
+}
+
+
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/SpiFactoryCleaner.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/SpiFactoryCleaner.java
new file mode 100644
index 000000000..a8510df3c
--- /dev/null
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/SpiFactoryCleaner.java
@@ -0,0 +1,12 @@
+package com.yomahub.liteflow.spi.factory;
+
+public class SpiFactoryCleaner {
+
+ public static void clean(){
+ CmpAroundAspectFactory.clean();
+ ContextAwareFactory.clean();
+ ContextCmpInitFactory.clean();
+ LiteflowComponentSupportFactory.clean();
+ PathContentParserFactory.clean();
+ }
+}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalCmpAroundAspect.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalCmpAroundAspect.java
new file mode 100644
index 000000000..adc4468de
--- /dev/null
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalCmpAroundAspect.java
@@ -0,0 +1,27 @@
+package com.yomahub.liteflow.spi.local;
+
+import com.yomahub.liteflow.entity.data.Slot;
+import com.yomahub.liteflow.spi.CmpAroundAspect;
+
+/**
+ * 非Spring环境全局组件切面实现
+ * 其实非Spring不支持全局组件切面,所以这个是个空实现
+ * @author Bryan.Zhang
+ * @since 2.6.11
+ */
+public class LocalCmpAroundAspect implements CmpAroundAspect {
+ @Override
+ public void beforeProcess(String nodeId, Slot slot) {
+ //无spring环境下为空实现
+ }
+
+ @Override
+ public void afterProcess(String nodeId, Slot slot) {
+ //无spring环境下为空实现
+ }
+
+ @Override
+ public int priority() {
+ return 2;
+ }
+}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalContextAware.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalContextAware.java
new file mode 100644
index 000000000..8734b270c
--- /dev/null
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalContextAware.java
@@ -0,0 +1,42 @@
+package com.yomahub.liteflow.spi.local;
+
+import cn.hutool.core.util.ReflectUtil;
+import com.yomahub.liteflow.spi.ContextAware;
+
+/**
+ * 非Spring环境容器实现
+ * 其实非Spring没有环境容器,所以这是个空实现
+ * @author Bryan.Zhang
+ * @since 2.6.11
+ */
+public class LocalContextAware implements ContextAware {
+ @Override
+ public T getBean(String name) {
+ return null;
+ }
+
+ @Override
+ public T getBean(Class clazz) {
+ return null;
+ }
+
+ @Override
+ public T registerBean(String beanName, Class clazz) {
+ return ReflectUtil.newInstance(clazz);
+ }
+
+ @Override
+ public T registerBean(Class clazz) {
+ return registerBean(null, clazz);
+ }
+
+ @Override
+ public T registerOrGet(String beanName, Class clazz) {
+ return registerBean(beanName, clazz);
+ }
+
+ @Override
+ public int priority() {
+ return 2;
+ }
+}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalContextCmpInit.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalContextCmpInit.java
new file mode 100644
index 000000000..e7337fd9d
--- /dev/null
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalContextCmpInit.java
@@ -0,0 +1,21 @@
+package com.yomahub.liteflow.spi.local;
+
+import com.yomahub.liteflow.spi.ContextCmpInit;
+
+/**
+ * 非Spring环境容器上下文组件初始化实现
+ * 其实非Spring没有环境容器,所以这是个空实现
+ * @author Bryan.Zhang
+ * @since 2.6.11
+ */
+public class LocalContextCmpInit implements ContextCmpInit {
+ @Override
+ public void initCmp() {
+ //非spring环境不用实现
+ }
+
+ @Override
+ public int priority() {
+ return 2;
+ }
+}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalLiteflowComponentSupport.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalLiteflowComponentSupport.java
new file mode 100644
index 000000000..30e653243
--- /dev/null
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalLiteflowComponentSupport.java
@@ -0,0 +1,22 @@
+package com.yomahub.liteflow.spi.local;
+
+import com.yomahub.liteflow.core.NodeComponent;
+import com.yomahub.liteflow.spi.LiteflowComponentSupport;
+
+/**
+ * 非spring环境LiteflowComponent注解的处理器
+ * 非spring环境不支持@LiteflowComponent注解,所以返回null
+ * @author Bryan.Zhang
+ * @since 2.6.11
+ */
+public class LocalLiteflowComponentSupport implements LiteflowComponentSupport {
+ @Override
+ public String getCmpName(NodeComponent nodeComponent) {
+ return null;
+ }
+
+ @Override
+ public int priority() {
+ return 2;
+ }
+}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalPathContentParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalPathContentParser.java
new file mode 100644
index 000000000..ae2b507dd
--- /dev/null
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalPathContentParser.java
@@ -0,0 +1,44 @@
+package com.yomahub.liteflow.spi.local;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.resource.ResourceUtil;
+import com.yomahub.liteflow.exception.ConfigErrorException;
+import com.yomahub.liteflow.spi.PathContentParser;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class LocalPathContentParser implements PathContentParser {
+
+ private final static String FILE_URL_PREFIX = "file:";
+
+ private final static String CLASSPATH_URL_PREFIX = "classpath:";
+
+ @Override
+ public List parseContent(List pathList) throws Exception {
+ if(CollectionUtil.isEmpty(pathList)){
+ throw new ConfigErrorException("rule source must not be null");
+ }
+
+ List contentList = new ArrayList<>();
+
+ for(String path : pathList){
+ if (FileUtil.isAbsolutePath(path) && FileUtil.isFile(path)){
+ path = FILE_URL_PREFIX + path;
+ } else {
+ if (!path.startsWith(CLASSPATH_URL_PREFIX)) {
+ path = CLASSPATH_URL_PREFIX + path;
+ }
+ }
+ contentList.add(ResourceUtil.readUtf8Str(path));
+ }
+
+ return contentList;
+ }
+
+ @Override
+ public int priority() {
+ return 2;
+ }
+}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/thread/LiteFlowDefaultExecutorBuilder.java b/liteflow-core/src/main/java/com/yomahub/liteflow/thread/LiteFlowDefaultExecutorBuilder.java
index 76c2b87ba..20f4ea23c 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/thread/LiteFlowDefaultExecutorBuilder.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/thread/LiteFlowDefaultExecutorBuilder.java
@@ -1,12 +1,10 @@
package com.yomahub.liteflow.thread;
import cn.hutool.core.util.ObjectUtil;
-import com.alibaba.ttl.threadpool.TtlExecutors;
import com.yomahub.liteflow.property.LiteflowConfig;
-import com.yomahub.liteflow.util.SpringAware;
+import com.yomahub.liteflow.property.LiteflowConfigGetter;
import java.util.concurrent.*;
-import java.util.concurrent.atomic.AtomicLong;
/**
* LiteFlow默认的并行多线程执行器实现
@@ -16,7 +14,7 @@ import java.util.concurrent.atomic.AtomicLong;
public class LiteFlowDefaultExecutorBuilder implements ExecutorBuilder{
@Override
public ExecutorService buildExecutor() {
- LiteflowConfig liteflowConfig = SpringAware.getBean(LiteflowConfig.class);
+ LiteflowConfig liteflowConfig = LiteflowConfigGetter.get();
//只有在非spring的场景下liteflowConfig才会为null
if (ObjectUtil.isNull(liteflowConfig)){
liteflowConfig = new LiteflowConfig();
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/util/LiteFlowExecutorPoolShutdown.java b/liteflow-core/src/main/java/com/yomahub/liteflow/util/LiteFlowExecutorPoolShutdown.java
index bae10f630..ddc3f6887 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/util/LiteFlowExecutorPoolShutdown.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/util/LiteFlowExecutorPoolShutdown.java
@@ -1,5 +1,6 @@
package com.yomahub.liteflow.util;
+import com.yomahub.liteflow.spi.factory.ContextAwareFactory;
import com.yomahub.liteflow.thread.ExecutorHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -18,7 +19,7 @@ public class LiteFlowExecutorPoolShutdown {
@PreDestroy
public void destroy() throws Exception {
- ExecutorService executorService = SpringAware.getBean("whenExecutors");
+ ExecutorService executorService = ContextAwareFactory.loadContextAware().getBean("whenExecutors");
LOG.info("Start closing the liteflow-when-calls...");
ExecutorHelper.loadInstance().shutdownAwaitTermination(executorService);
diff --git a/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.CmpAroundAspect b/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.CmpAroundAspect
new file mode 100644
index 000000000..ea0ae6d99
--- /dev/null
+++ b/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.CmpAroundAspect
@@ -0,0 +1,2 @@
+# 无Spring的实现
+com.yomahub.liteflow.spi.local.LocalCmpAroundAspect
\ No newline at end of file
diff --git a/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextAware b/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextAware
new file mode 100644
index 000000000..399ac81e4
--- /dev/null
+++ b/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextAware
@@ -0,0 +1,2 @@
+# 无Spring的实现
+com.yomahub.liteflow.spi.local.LocalContextAware
\ No newline at end of file
diff --git a/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextCmpInit b/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextCmpInit
new file mode 100644
index 000000000..4f178faeb
--- /dev/null
+++ b/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextCmpInit
@@ -0,0 +1,2 @@
+# 无Spring的实现
+com.yomahub.liteflow.spi.local.LocalContextCmpInit
\ No newline at end of file
diff --git a/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.LiteflowComponentSupport b/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.LiteflowComponentSupport
new file mode 100644
index 000000000..38f7403f1
--- /dev/null
+++ b/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.LiteflowComponentSupport
@@ -0,0 +1,2 @@
+# 无Spring的实现
+com.yomahub.liteflow.spi.local.LocalLiteflowComponentSupport
\ No newline at end of file
diff --git a/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.PathContentParser b/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.PathContentParser
new file mode 100644
index 000000000..446b419f8
--- /dev/null
+++ b/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.PathContentParser
@@ -0,0 +1,2 @@
+# 无Spring的实现
+com.yomahub.liteflow.spi.local.LocalPathContentParser
\ No newline at end of file
diff --git a/liteflow-spring-boot-starter/pom.xml b/liteflow-spring-boot-starter/pom.xml
index 050574944..6aaad0441 100644
--- a/liteflow-spring-boot-starter/pom.xml
+++ b/liteflow-spring-boot-starter/pom.xml
@@ -16,7 +16,7 @@
com.yomahub
- liteflow-core
+ liteflow-spring
${project.parent.version}
diff --git a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/config/LiteflowMainAutoConfiguration.java b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/config/LiteflowMainAutoConfiguration.java
index e8fe65d8d..18eda53ea 100644
--- a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/config/LiteflowMainAutoConfiguration.java
+++ b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/config/LiteflowMainAutoConfiguration.java
@@ -1,12 +1,11 @@
package com.yomahub.liteflow.springboot.config;
-import cn.hutool.core.util.StrUtil;
import com.yomahub.liteflow.core.FlowExecutor;
import com.yomahub.liteflow.monitor.MonitorBus;
import com.yomahub.liteflow.property.LiteflowConfig;
+import com.yomahub.liteflow.spi.spring.SpringAware;
import com.yomahub.liteflow.spring.ComponentScanner;
import com.yomahub.liteflow.springboot.LiteflowExecutorInit;
-import com.yomahub.liteflow.util.SpringAware;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
diff --git a/liteflow-spring/pom.xml b/liteflow-spring/pom.xml
new file mode 100644
index 000000000..179f82285
--- /dev/null
+++ b/liteflow-spring/pom.xml
@@ -0,0 +1,37 @@
+
+
+
+ liteflow
+ com.yomahub
+ 2.6.11
+
+ 4.0.0
+
+ liteflow-spring
+
+
+
+ com.yomahub
+ liteflow-core
+ ${project.parent.version}
+
+
+ org.springframework
+ spring-beans
+
+
+ org.springframework
+ spring-context
+
+
+ org.springframework
+ spring-aop
+
+
+ org.springframework
+ spring-expression
+
+
+
\ No newline at end of file
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/LiteflowComponent.java b/liteflow-spring/src/main/java/com/yomahub/liteflow/annotation/LiteflowComponent.java
similarity index 99%
rename from liteflow-core/src/main/java/com/yomahub/liteflow/annotation/LiteflowComponent.java
rename to liteflow-spring/src/main/java/com/yomahub/liteflow/annotation/LiteflowComponent.java
index ed830c959..8c3a58ab8 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/LiteflowComponent.java
+++ b/liteflow-spring/src/main/java/com/yomahub/liteflow/annotation/LiteflowComponent.java
@@ -1,8 +1,7 @@
package com.yomahub.liteflow.annotation;
-import org.springframework.core.annotation.AliasFor;
import org.springframework.stereotype.Component;
-
+import org.springframework.core.annotation.AliasFor;
import java.lang.annotation.*;
/**
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/util/SpringAware.java b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringAware.java
similarity index 77%
rename from liteflow-core/src/main/java/com/yomahub/liteflow/util/SpringAware.java
rename to liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringAware.java
index 0131a96b3..ed0c45fd8 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/util/SpringAware.java
+++ b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringAware.java
@@ -1,9 +1,9 @@
-package com.yomahub.liteflow.util;
+package com.yomahub.liteflow.spi.spring;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReflectUtil;
+import com.yomahub.liteflow.spi.ContextAware;
import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.support.GenericBeanDefinition;
@@ -14,7 +14,7 @@ import org.springframework.context.ApplicationContextAware;
* 基于代码形式的spring上下文工具类
* @author Bryan.Zhang
*/
-public class SpringAware implements ApplicationContextAware {
+public class SpringAware implements ApplicationContextAware, ContextAware {
private static ApplicationContext applicationContext = null;
@@ -29,7 +29,7 @@ public class SpringAware implements ApplicationContextAware {
return applicationContext;
}
- public static T getBean(String name) {
+ public T getBean(String name) {
try{
T t = (T) applicationContext.getBean(name);
return t;
@@ -38,7 +38,7 @@ public class SpringAware implements ApplicationContextAware {
}
}
- public static T getBean(Class clazz) {
+ public T getBean(Class clazz) {
try{
T t = applicationContext.getBean(clazz);
return t;
@@ -47,7 +47,7 @@ public class SpringAware implements ApplicationContextAware {
}
}
- public static T registerBean(String beanName, Class c) {
+ public T registerBean(String beanName, Class c) {
try{
DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory)applicationContext.getAutowireCapableBeanFactory();
BeanDefinition beanDefinition = new GenericBeanDefinition();
@@ -59,18 +59,23 @@ public class SpringAware implements ApplicationContextAware {
}
}
- public static T registerBean(Class c) {
+ public T registerBean(Class c) {
return registerBean(c.getName(), c);
}
- public static T registerOrGet(String beanName, Class clazz) {
+ public T registerOrGet(String beanName, Class clazz) {
if (ObjectUtil.isNull(applicationContext)){
return null;
}
- T t = SpringAware.getBean(clazz);
+ T t = getBean(clazz);
if (ObjectUtil.isNull(t)) {
- t = SpringAware.registerBean(beanName, clazz);
+ t = registerBean(beanName, clazz);
}
return t;
}
+
+ @Override
+ public int priority() {
+ return 1;
+ }
}
diff --git a/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringCmpAroundAspect.java b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringCmpAroundAspect.java
new file mode 100644
index 000000000..456e16db9
--- /dev/null
+++ b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringCmpAroundAspect.java
@@ -0,0 +1,32 @@
+package com.yomahub.liteflow.spi.spring;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.yomahub.liteflow.entity.data.Slot;
+import com.yomahub.liteflow.spi.CmpAroundAspect;
+import com.yomahub.liteflow.spring.ComponentScanner;
+
+/**
+ * Spring环境全局组件切面实现
+ * @author Bryan.Zhang
+ * @since 2.6.11
+ */
+public class SpringCmpAroundAspect implements CmpAroundAspect {
+ @Override
+ public void beforeProcess(String nodeId, Slot slot) {
+ if (ObjectUtil.isNotNull(ComponentScanner.cmpAroundAspect)) {
+ ComponentScanner.cmpAroundAspect.beforeProcess(nodeId, slot);
+ }
+ }
+
+ @Override
+ public void afterProcess(String nodeId, Slot slot) {
+ if (ObjectUtil.isNotNull(ComponentScanner.cmpAroundAspect)) {
+ ComponentScanner.cmpAroundAspect.afterProcess(nodeId, slot);
+ }
+ }
+
+ @Override
+ public int priority() {
+ return 1;
+ }
+}
diff --git a/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringContextCmpInit.java b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringContextCmpInit.java
new file mode 100644
index 000000000..e7ae4de7f
--- /dev/null
+++ b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringContextCmpInit.java
@@ -0,0 +1,29 @@
+package com.yomahub.liteflow.spi.spring;
+
+import com.yomahub.liteflow.core.NodeComponent;
+import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.spi.ContextCmpInit;
+import com.yomahub.liteflow.spring.ComponentScanner;
+
+import java.util.Map;
+
+/**
+ * Spring环境容器上下文组件初始化实现
+ * @author Bryan.Zhang
+ * @since 2.6.11
+ */
+public class SpringContextCmpInit implements ContextCmpInit {
+ @Override
+ public void initCmp() {
+ for (Map.Entry componentEntry : ComponentScanner.nodeComponentMap.entrySet()) {
+ if (!FlowBus.containNode(componentEntry.getKey())) {
+ FlowBus.addSpringScanNode(componentEntry.getKey(), componentEntry.getValue());
+ }
+ }
+ }
+
+ @Override
+ public int priority() {
+ return 1;
+ }
+}
diff --git a/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringLiteflowComponentSupport.java b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringLiteflowComponentSupport.java
new file mode 100644
index 000000000..13267eb7d
--- /dev/null
+++ b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringLiteflowComponentSupport.java
@@ -0,0 +1,31 @@
+package com.yomahub.liteflow.spi.spring;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.yomahub.liteflow.annotation.LiteflowComponent;
+import com.yomahub.liteflow.core.NodeComponent;
+import com.yomahub.liteflow.spi.LiteflowComponentSupport;
+
+/**
+ * spring环境LiteflowComponent注解的处理器
+ * @author Bryan.Zhang
+ * @since 2.6.11
+ */
+public class SpringLiteflowComponentSupport implements LiteflowComponentSupport {
+ @Override
+ public String getCmpName(NodeComponent nodeComponent) {
+ //判断NodeComponent是否是标识了@LiteflowComponent的标注
+ //如果标注了,那么要从中取到name字段
+ LiteflowComponent liteflowComponent = nodeComponent.getClass().getAnnotation(LiteflowComponent.class);
+ if (ObjectUtil.isNotNull(liteflowComponent)) {
+ return liteflowComponent.name();
+ }else{
+ return null;
+ }
+ }
+
+ @Override
+ public int priority() {
+ return 1;
+ }
+}
\ No newline at end of file
diff --git a/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringPathContentParser.java b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringPathContentParser.java
new file mode 100644
index 000000000..569a25cc2
--- /dev/null
+++ b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringPathContentParser.java
@@ -0,0 +1,74 @@
+package com.yomahub.liteflow.spi.spring;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.util.CharsetUtil;
+import cn.hutool.core.util.StrUtil;
+import com.yomahub.liteflow.exception.ConfigErrorException;
+import com.yomahub.liteflow.spi.PathContentParser;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.util.ResourceUtils;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+public class SpringPathContentParser implements PathContentParser {
+ @Override
+ public List parseContent(List pathList) throws Exception {
+ if(CollectionUtil.isEmpty(pathList)){
+ throw new ConfigErrorException("rule source must not be null");
+ }
+
+ List allResource = new ArrayList<>();
+ for (String path : pathList) {
+ String locationPattern;
+
+ //如果path是绝对路径且这个文件存在时,我们认为这是一个本地文件路径,而并非classpath路径
+ if (FileUtil.isAbsolutePath(path) && FileUtil.isFile(path)){
+ locationPattern = ResourceUtils.FILE_URL_PREFIX + path;
+ } else {
+ if (!path.startsWith(ResourceUtils.CLASSPATH_URL_PREFIX)) {
+ locationPattern = ResourceUtils.CLASSPATH_URL_PREFIX + path;
+ }else{
+ locationPattern = path;
+ }
+ }
+
+ PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
+ Resource[] resources = resolver.getResources(locationPattern);
+ if (ArrayUtil.isEmpty(resources)) {
+ throw new ConfigErrorException("config error,please check rule source property");
+ }
+ allResource.addAll(ListUtil.toList(resources));
+ }
+
+ //如果有多个资源,检查资源都是同一个类型,如果出现不同类型的配置,则抛出错误提示
+ Set fileTypeSet = new HashSet<>();
+ allResource.forEach(resource -> fileTypeSet.add(FileUtil.extName(resource.getFilename())));
+ if (fileTypeSet.size() != 1) {
+ throw new ConfigErrorException("config error,please use the same type of configuration");
+ }
+
+ //转换成内容List
+ List contentList = new ArrayList<>();
+ for (Resource resource : allResource) {
+ String content = IoUtil.read(resource.getInputStream(), CharsetUtil.CHARSET_UTF_8);
+ if (StrUtil.isNotBlank(content)){
+ contentList.add(content);
+ }
+ }
+
+ return contentList;
+ }
+
+ @Override
+ public int priority() {
+ return 1;
+ }
+}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spring/ComponentScanner.java b/liteflow-spring/src/main/java/com/yomahub/liteflow/spring/ComponentScanner.java
similarity index 96%
rename from liteflow-core/src/main/java/com/yomahub/liteflow/spring/ComponentScanner.java
rename to liteflow-spring/src/main/java/com/yomahub/liteflow/spring/ComponentScanner.java
index 58b7b2510..a9d782354 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/spring/ComponentScanner.java
+++ b/liteflow-spring/src/main/java/com/yomahub/liteflow/spring/ComponentScanner.java
@@ -11,14 +11,14 @@ package com.yomahub.liteflow.spring;
import com.yomahub.liteflow.aop.ICmpAroundAspect;
import com.yomahub.liteflow.core.NodeComponent;
import com.yomahub.liteflow.property.LiteflowConfig;
-import com.yomahub.liteflow.property.LiteflowConfigGetter;
import com.yomahub.liteflow.util.LOGOPrinter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
-import java.util.*;
+import java.util.HashMap;
+import java.util.Map;
/**
* 组件扫描类,只要是NodeComponent的实现类,都可以被这个扫描器扫到
diff --git a/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.CmpAroundAspect b/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.CmpAroundAspect
new file mode 100644
index 000000000..d2b9a458c
--- /dev/null
+++ b/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.CmpAroundAspect
@@ -0,0 +1,2 @@
+# 无Spring的实现
+com.yomahub.liteflow.spi.spring.SpringCmpAroundAspect
\ No newline at end of file
diff --git a/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextAware b/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextAware
new file mode 100644
index 000000000..0f374d346
--- /dev/null
+++ b/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextAware
@@ -0,0 +1,2 @@
+# Spring的实现
+com.yomahub.liteflow.spi.spring.SpringAware
\ No newline at end of file
diff --git a/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextCmpInit b/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextCmpInit
new file mode 100644
index 000000000..da957677c
--- /dev/null
+++ b/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextCmpInit
@@ -0,0 +1,2 @@
+# Spring的实现
+com.yomahub.liteflow.spi.spring.SpringContextCmpInit
\ No newline at end of file
diff --git a/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.LiteflowComponentSupport b/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.LiteflowComponentSupport
new file mode 100644
index 000000000..02d4f6e4f
--- /dev/null
+++ b/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.LiteflowComponentSupport
@@ -0,0 +1,2 @@
+# 无Spring的实现
+com.yomahub.liteflow.spi.spring.SpringLiteflowComponentSupport
\ No newline at end of file
diff --git a/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.PathContentParser b/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.PathContentParser
new file mode 100644
index 000000000..c42665f48
--- /dev/null
+++ b/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.PathContentParser
@@ -0,0 +1,2 @@
+# Spring的实现
+com.yomahub.liteflow.spi.spring.SpringPathContentParser
\ No newline at end of file
diff --git a/liteflow-testcase-nospring/pom.xml b/liteflow-testcase-nospring/pom.xml
new file mode 100644
index 000000000..7252e31fa
--- /dev/null
+++ b/liteflow-testcase-nospring/pom.xml
@@ -0,0 +1,50 @@
+
+
+
+ liteflow
+ com.yomahub
+ 2.6.11
+
+ 4.0.0
+
+ liteflow-testcase-nospring
+
+
+
+ com.yomahub
+ liteflow-core
+ ${project.version}
+
+
+ junit
+ junit
+ test
+
+
+ org.apache.curator
+ curator-test
+ test
+
+
+ com.101tec
+ zkclient
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+ 2.8.2
+
+ true
+
+
+
+
+
+
\ No newline at end of file
diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/BaseTest.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/BaseTest.java
new file mode 100644
index 000000000..882dff76a
--- /dev/null
+++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/BaseTest.java
@@ -0,0 +1,22 @@
+package com.yomahub.liteflow.test.base;
+
+import com.yomahub.liteflow.core.FlowExecutor;
+import com.yomahub.liteflow.entity.data.DefaultSlot;
+import com.yomahub.liteflow.entity.data.LiteflowResponse;
+import com.yomahub.liteflow.property.LiteflowConfig;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class BaseTest {
+
+ @Test
+ public void testBase(){
+ LiteflowConfig config = new LiteflowConfig();
+ config.setRuleSource("base/flow.xml");
+ FlowExecutor executor = new FlowExecutor();
+ executor.setLiteflowConfig(config);
+ executor.init();
+ LiteflowResponse response = executor.execute2Resp("chain1", "test0");
+ Assert.assertTrue(response.isSuccess());
+ }
+}
diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/ACmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/ACmp.java
new file mode 100644
index 000000000..e7d9de395
--- /dev/null
+++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/ACmp.java
@@ -0,0 +1,18 @@
+/**
+ * Title: liteflow
+ * Description: 轻量级的组件式流程框架
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2020/4/1
+ */
+package com.yomahub.liteflow.test.base.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+
+public class ACmp extends NodeComponent {
+
+ @Override
+ public void process() {
+ System.out.println("ACmp executed!");
+ }
+}
diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/BCmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/BCmp.java
new file mode 100644
index 000000000..cfcfcfdd9
--- /dev/null
+++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/BCmp.java
@@ -0,0 +1,19 @@
+/**
+ * Title: liteflow
+ * Description: 轻量级的组件式流程框架
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2020/4/1
+ */
+package com.yomahub.liteflow.test.base.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+
+public class BCmp extends NodeComponent {
+
+ @Override
+ public void process() {
+ System.out.println("BCmp executed!");
+ }
+
+}
diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/CCmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/CCmp.java
new file mode 100644
index 000000000..6194d81ab
--- /dev/null
+++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/CCmp.java
@@ -0,0 +1,19 @@
+/**
+ * Title: liteflow
+ * Description: 轻量级的组件式流程框架
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2020/4/1
+ */
+package com.yomahub.liteflow.test.base.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+
+public class CCmp extends NodeComponent {
+
+ @Override
+ public void process() {
+ System.out.println("CCmp executed!");
+ }
+
+}
diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/DCmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/DCmp.java
new file mode 100644
index 000000000..c5ec937e3
--- /dev/null
+++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/DCmp.java
@@ -0,0 +1,19 @@
+/**
+ * Title: liteflow
+ * Description: 轻量级的组件式流程框架
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2020/4/1
+ */
+package com.yomahub.liteflow.test.base.cmp;
+
+import com.yomahub.liteflow.core.NodeComponent;
+
+public class DCmp extends NodeComponent {
+
+ @Override
+ public void process() {
+ System.out.println("DCmp executed!");
+ }
+
+}
diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/ECmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/ECmp.java
new file mode 100644
index 000000000..16d4d82db
--- /dev/null
+++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/ECmp.java
@@ -0,0 +1,18 @@
+/**
+ * Title: liteflow
+ * Description: 轻量级的组件式流程框架
+ * @author Bryan.Zhang
+ * @email weenyc31@163.com
+ * @Date 2020/4/1
+ */
+package com.yomahub.liteflow.test.base.cmp;
+
+import com.yomahub.liteflow.core.NodeCondComponent;
+
+public class ECmp extends NodeCondComponent {
+
+ @Override
+ public String processCond() throws Exception {
+ return "g";
+ }
+}
diff --git a/liteflow-testcase-nospring/src/test/resources/base/flow.xml b/liteflow-testcase-nospring/src/test/resources/base/flow.xml
new file mode 100644
index 000000000..bc02c6194
--- /dev/null
+++ b/liteflow-testcase-nospring/src/test/resources/base/flow.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/liteflow-testcase-script-groovy/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-script-groovy/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index 73938d978..51a5a47c7 100644
--- a/liteflow-testcase-script-groovy/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-script-groovy/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -1,6 +1,8 @@
package com.yomahub.liteflow.test;
import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.property.LiteflowConfigGetter;
+import com.yomahub.liteflow.spi.factory.SpiFactoryCleaner;
import com.yomahub.liteflow.spring.ComponentScanner;
import com.yomahub.liteflow.thread.ExecutorHelper;
import org.junit.AfterClass;
@@ -12,5 +14,7 @@ public class BaseTest {
ComponentScanner.cleanCache();
FlowBus.cleanCache();
ExecutorHelper.loadInstance().clearExecutorServiceMap();
+ SpiFactoryCleaner.clean();
+ LiteflowConfigGetter.clean();
}
}
diff --git a/liteflow-testcase-script-qlexpress/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-script-qlexpress/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index 73938d978..51a5a47c7 100644
--- a/liteflow-testcase-script-qlexpress/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-script-qlexpress/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -1,6 +1,8 @@
package com.yomahub.liteflow.test;
import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.property.LiteflowConfigGetter;
+import com.yomahub.liteflow.spi.factory.SpiFactoryCleaner;
import com.yomahub.liteflow.spring.ComponentScanner;
import com.yomahub.liteflow.thread.ExecutorHelper;
import org.junit.AfterClass;
@@ -12,5 +14,7 @@ public class BaseTest {
ComponentScanner.cleanCache();
FlowBus.cleanCache();
ExecutorHelper.loadInstance().clearExecutorServiceMap();
+ SpiFactoryCleaner.clean();
+ LiteflowConfigGetter.clean();
}
}
diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index a40787648..51a5a47c7 100644
--- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -1,7 +1,8 @@
package com.yomahub.liteflow.test;
-import com.yomahub.liteflow.entity.data.DataBus;
import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.property.LiteflowConfigGetter;
+import com.yomahub.liteflow.spi.factory.SpiFactoryCleaner;
import com.yomahub.liteflow.spring.ComponentScanner;
import com.yomahub.liteflow.thread.ExecutorHelper;
import org.junit.AfterClass;
@@ -13,5 +14,7 @@ public class BaseTest {
ComponentScanner.cleanCache();
FlowBus.cleanCache();
ExecutorHelper.loadInstance().clearExecutorServiceMap();
+ SpiFactoryCleaner.clean();
+ LiteflowConfigGetter.clean();
}
}
diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/aop/LFGlobalAOPTest.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/aop/LFGlobalAOPTest.java
index eea72321b..95f5959e7 100644
--- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/aop/LFGlobalAOPTest.java
+++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/aop/LFGlobalAOPTest.java
@@ -3,7 +3,6 @@ package com.yomahub.liteflow.test.aop;
import com.yomahub.liteflow.core.FlowExecutor;
import com.yomahub.liteflow.entity.data.DefaultSlot;
import com.yomahub.liteflow.entity.data.LiteflowResponse;
-import com.yomahub.liteflow.flow.FlowBus;
import com.yomahub.liteflow.spring.ComponentScanner;
import com.yomahub.liteflow.test.BaseTest;
import com.yomahub.liteflow.test.aop.aspect.CmpAspect;
diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor1.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor1.java
index ba9fe5eaf..1ced39ce6 100644
--- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor1.java
+++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor1.java
@@ -1,19 +1,17 @@
package com.yomahub.liteflow.test.customWhenThreadPool;
import cn.hutool.core.util.ObjectUtil;
-import com.alibaba.ttl.threadpool.TtlExecutors;
import com.yomahub.liteflow.property.LiteflowConfig;
+import com.yomahub.liteflow.spi.factory.ContextAwareFactory;
import com.yomahub.liteflow.thread.ExecutorBuilder;
-import com.yomahub.liteflow.util.SpringAware;
import java.util.concurrent.*;
-import java.util.concurrent.atomic.AtomicLong;
public class CustomThreadExecutor1 implements ExecutorBuilder {
@Override
public ExecutorService buildExecutor() {
- LiteflowConfig liteflowConfig = SpringAware.getBean(LiteflowConfig.class);
+ LiteflowConfig liteflowConfig = ContextAwareFactory.loadContextAware().getBean(LiteflowConfig.class);
//只有在非spring的场景下liteflowConfig才会为null
if (ObjectUtil.isNull(liteflowConfig)) {
liteflowConfig = new LiteflowConfig();
diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor2.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor2.java
index 1ff6d22a0..f1c07fbe8 100644
--- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor2.java
+++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor2.java
@@ -1,18 +1,16 @@
package com.yomahub.liteflow.test.customWhenThreadPool;
import cn.hutool.core.util.ObjectUtil;
-import com.alibaba.ttl.threadpool.TtlExecutors;
import com.yomahub.liteflow.property.LiteflowConfig;
+import com.yomahub.liteflow.spi.factory.ContextAwareFactory;
import com.yomahub.liteflow.thread.ExecutorBuilder;
-import com.yomahub.liteflow.util.SpringAware;
import java.util.concurrent.*;
-import java.util.concurrent.atomic.AtomicLong;
public class CustomThreadExecutor2 implements ExecutorBuilder {
@Override
public ExecutorService buildExecutor() {
- LiteflowConfig liteflowConfig = SpringAware.getBean(LiteflowConfig.class);
+ LiteflowConfig liteflowConfig = ContextAwareFactory.loadContextAware().getBean(LiteflowConfig.class);
//只有在非spring的场景下liteflowConfig才会为null
if (ObjectUtil.isNull(liteflowConfig)) {
liteflowConfig = new LiteflowConfig();
diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor3.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor3.java
index 3519cfe20..55bfcf6f2 100644
--- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor3.java
+++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor3.java
@@ -2,15 +2,15 @@ package com.yomahub.liteflow.test.customWhenThreadPool;
import cn.hutool.core.util.ObjectUtil;
import com.yomahub.liteflow.property.LiteflowConfig;
+import com.yomahub.liteflow.spi.factory.ContextAwareFactory;
import com.yomahub.liteflow.thread.ExecutorBuilder;
-import com.yomahub.liteflow.util.SpringAware;
import java.util.concurrent.ExecutorService;
public class CustomThreadExecutor3 implements ExecutorBuilder {
@Override
public ExecutorService buildExecutor() {
- LiteflowConfig liteflowConfig = SpringAware.getBean(LiteflowConfig.class);
+ LiteflowConfig liteflowConfig = ContextAwareFactory.loadContextAware().getBean(LiteflowConfig.class);
//只有在非spring的场景下liteflowConfig才会为null
if (ObjectUtil.isNull(liteflowConfig)) {
liteflowConfig = new LiteflowConfig();
diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/ACmp.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/ACmp.java
index 89802080b..6e9cec68a 100644
--- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/ACmp.java
+++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/ACmp.java
@@ -14,7 +14,6 @@ import org.springframework.stereotype.Component;
import java.util.HashSet;
-@Component("a")
@LiteflowComponent("a")
public class ACmp extends NodeComponent {
diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/BCmp.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/BCmp.java
index 4e6023b90..b950f985b 100644
--- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/BCmp.java
+++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/BCmp.java
@@ -13,7 +13,6 @@ import org.springframework.stereotype.Component;
import java.util.Set;
-@Component("b")
@LiteflowComponent("b")
public class BCmp extends NodeComponent {
diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/CCmp.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/CCmp.java
index 6d713b507..8d79eb1bc 100644
--- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/CCmp.java
+++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/CCmp.java
@@ -9,7 +9,6 @@ package com.yomahub.liteflow.test.privateDelivery.cmp;
import com.yomahub.liteflow.annotation.LiteflowComponent;
import com.yomahub.liteflow.core.NodeComponent;
-import org.springframework.stereotype.Component;
@LiteflowComponent("c")
public class CCmp extends NodeComponent {
diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/reload/ReloadSpringbootTest.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/reload/ReloadSpringbootTest.java
index 65a814fb5..c4f0fd63f 100644
--- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/reload/ReloadSpringbootTest.java
+++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/reload/ReloadSpringbootTest.java
@@ -39,6 +39,8 @@ public class ReloadSpringbootTest extends BaseTest {
@Resource
private FlowExecutor flowExecutor;
+ //用reloadRule去重新加载,这里如果配置是放在本地。如果想修改,则要去修改target下面的flow.xml
+ //这里的测试,手动打断点然后去修改,是ok的。但是整个测试,暂且只是为了测试这个功能是否能正常运行
@Test
public void testReload() throws Exception{
flowExecutor.reloadRule();
diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/ACmp.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/ACmp.java
index 744ef128b..fd3b1dbab 100644
--- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/ACmp.java
+++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/ACmp.java
@@ -11,8 +11,6 @@ import com.yomahub.liteflow.annotation.LiteflowComponent;
import com.yomahub.liteflow.core.NodeComponent;
import com.yomahub.liteflow.entity.data.Slot;
-import java.util.HashSet;
-
@LiteflowComponent("a")
public class ACmp extends NodeComponent {
diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/B1Cmp.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/B1Cmp.java
index 7acef141f..fcc4c6024 100644
--- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/B1Cmp.java
+++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/B1Cmp.java
@@ -12,10 +12,6 @@ import com.yomahub.liteflow.annotation.LiteflowComponent;
import com.yomahub.liteflow.core.NodeComponent;
import com.yomahub.liteflow.entity.data.Slot;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
@LiteflowComponent("b1")
public class B1Cmp extends NodeComponent {
diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/BCmp.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/BCmp.java
index 1b9a0013f..1e31246f0 100644
--- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/BCmp.java
+++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/BCmp.java
@@ -12,9 +12,6 @@ import com.yomahub.liteflow.annotation.LiteflowComponent;
import com.yomahub.liteflow.core.NodeComponent;
import com.yomahub.liteflow.entity.data.Slot;
-import java.util.HashSet;
-import java.util.Set;
-
@LiteflowComponent("b")
public class BCmp extends NodeComponent {
diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/CCmp.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/CCmp.java
index 2a51e60e6..40bb27d70 100644
--- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/CCmp.java
+++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/CCmp.java
@@ -8,7 +8,6 @@
package com.yomahub.liteflow.test.tag.cmp;
import com.yomahub.liteflow.annotation.LiteflowComponent;
-import com.yomahub.liteflow.core.NodeComponent;
import com.yomahub.liteflow.core.NodeCondComponent;
@LiteflowComponent("c")
diff --git a/liteflow-testcase-springnative/pom.xml b/liteflow-testcase-springnative/pom.xml
index e48b9e427..5a567fccc 100644
--- a/liteflow-testcase-springnative/pom.xml
+++ b/liteflow-testcase-springnative/pom.xml
@@ -14,7 +14,7 @@
com.yomahub
- liteflow-core
+ liteflow-spring
${project.version}
diff --git a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/BaseTest.java
index 73938d978..51a5a47c7 100644
--- a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/BaseTest.java
+++ b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/BaseTest.java
@@ -1,6 +1,8 @@
package com.yomahub.liteflow.test;
import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.property.LiteflowConfigGetter;
+import com.yomahub.liteflow.spi.factory.SpiFactoryCleaner;
import com.yomahub.liteflow.spring.ComponentScanner;
import com.yomahub.liteflow.thread.ExecutorHelper;
import org.junit.AfterClass;
@@ -12,5 +14,7 @@ public class BaseTest {
ComponentScanner.cleanCache();
FlowBus.cleanCache();
ExecutorHelper.loadInstance().clearExecutorServiceMap();
+ SpiFactoryCleaner.clean();
+ LiteflowConfigGetter.clean();
}
}
diff --git a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor1.java b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor1.java
index 0158b31ec..4195ade94 100644
--- a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor1.java
+++ b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor1.java
@@ -2,8 +2,8 @@ package com.yomahub.liteflow.test.customWhenThreadPool;
import cn.hutool.core.util.ObjectUtil;
import com.yomahub.liteflow.property.LiteflowConfig;
+import com.yomahub.liteflow.spi.factory.ContextAwareFactory;
import com.yomahub.liteflow.thread.ExecutorBuilder;
-import com.yomahub.liteflow.util.SpringAware;
import java.util.concurrent.ExecutorService;
@@ -11,7 +11,7 @@ public class CustomThreadExecutor1 implements ExecutorBuilder {
@Override
public ExecutorService buildExecutor() {
- LiteflowConfig liteflowConfig = SpringAware.getBean(LiteflowConfig.class);
+ LiteflowConfig liteflowConfig = ContextAwareFactory.loadContextAware().getBean(LiteflowConfig.class);
//只有在非spring的场景下liteflowConfig才会为null
if (ObjectUtil.isNull(liteflowConfig)) {
liteflowConfig = new LiteflowConfig();
diff --git a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor2.java b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor2.java
index 930105c6d..60638c3ca 100644
--- a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor2.java
+++ b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor2.java
@@ -2,15 +2,15 @@ package com.yomahub.liteflow.test.customWhenThreadPool;
import cn.hutool.core.util.ObjectUtil;
import com.yomahub.liteflow.property.LiteflowConfig;
+import com.yomahub.liteflow.spi.factory.ContextAwareFactory;
import com.yomahub.liteflow.thread.ExecutorBuilder;
-import com.yomahub.liteflow.util.SpringAware;
import java.util.concurrent.ExecutorService;
public class CustomThreadExecutor2 implements ExecutorBuilder {
@Override
public ExecutorService buildExecutor() {
- LiteflowConfig liteflowConfig = SpringAware.getBean(LiteflowConfig.class);
+ LiteflowConfig liteflowConfig = ContextAwareFactory.loadContextAware().getBean(LiteflowConfig.class);
//只有在非spring的场景下liteflowConfig才会为null
if (ObjectUtil.isNull(liteflowConfig)) {
liteflowConfig = new LiteflowConfig();
diff --git a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor3.java b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor3.java
index 3519cfe20..55bfcf6f2 100644
--- a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor3.java
+++ b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor3.java
@@ -2,15 +2,15 @@ package com.yomahub.liteflow.test.customWhenThreadPool;
import cn.hutool.core.util.ObjectUtil;
import com.yomahub.liteflow.property.LiteflowConfig;
+import com.yomahub.liteflow.spi.factory.ContextAwareFactory;
import com.yomahub.liteflow.thread.ExecutorBuilder;
-import com.yomahub.liteflow.util.SpringAware;
import java.util.concurrent.ExecutorService;
public class CustomThreadExecutor3 implements ExecutorBuilder {
@Override
public ExecutorService buildExecutor() {
- LiteflowConfig liteflowConfig = SpringAware.getBean(LiteflowConfig.class);
+ LiteflowConfig liteflowConfig = ContextAwareFactory.loadContextAware().getBean(LiteflowConfig.class);
//只有在非spring的场景下liteflowConfig才会为null
if (ObjectUtil.isNull(liteflowConfig)) {
liteflowConfig = new LiteflowConfig();
diff --git a/liteflow-testcase-springnative/src/test/resources/config/application-local.xml b/liteflow-testcase-springnative/src/test/resources/config/application-local.xml
index cf60572b1..751e16799 100644
--- a/liteflow-testcase-springnative/src/test/resources/config/application-local.xml
+++ b/liteflow-testcase-springnative/src/test/resources/config/application-local.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/liteflow-testcase-springnative/src/test/resources/config/local-rule-source-pattern-match.xml b/liteflow-testcase-springnative/src/test/resources/config/local-rule-source-pattern-match.xml
index 4f8b013c5..b4d8989f0 100644
--- a/liteflow-testcase-springnative/src/test/resources/config/local-rule-source-pattern-match.xml
+++ b/liteflow-testcase-springnative/src/test/resources/config/local-rule-source-pattern-match.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/liteflow-testcase-springnative/src/test/resources/customThreadPool/application.xml b/liteflow-testcase-springnative/src/test/resources/customThreadPool/application.xml
index 8641315a2..9032948a9 100644
--- a/liteflow-testcase-springnative/src/test/resources/customThreadPool/application.xml
+++ b/liteflow-testcase-springnative/src/test/resources/customThreadPool/application.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/liteflow-testcase-springnative/src/test/resources/customWhenThreadPool/application.xml b/liteflow-testcase-springnative/src/test/resources/customWhenThreadPool/application.xml
index 66777a653..ce09aca97 100644
--- a/liteflow-testcase-springnative/src/test/resources/customWhenThreadPool/application.xml
+++ b/liteflow-testcase-springnative/src/test/resources/customWhenThreadPool/application.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/liteflow-testcase-springnative/src/test/resources/enable/application-local.xml b/liteflow-testcase-springnative/src/test/resources/enable/application-local.xml
index 8c70f978f..cd2324656 100644
--- a/liteflow-testcase-springnative/src/test/resources/enable/application-local.xml
+++ b/liteflow-testcase-springnative/src/test/resources/enable/application-local.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/liteflow-testcase-springnative/src/test/resources/nullParam/application-local.xml b/liteflow-testcase-springnative/src/test/resources/nullParam/application-local.xml
index 36bf18e53..4683e7c17 100644
--- a/liteflow-testcase-springnative/src/test/resources/nullParam/application-local.xml
+++ b/liteflow-testcase-springnative/src/test/resources/nullParam/application-local.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/liteflow-testcase-springnative/src/test/resources/parser/application-json.xml b/liteflow-testcase-springnative/src/test/resources/parser/application-json.xml
index b04869223..8025d6cf1 100644
--- a/liteflow-testcase-springnative/src/test/resources/parser/application-json.xml
+++ b/liteflow-testcase-springnative/src/test/resources/parser/application-json.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/liteflow-testcase-springnative/src/test/resources/parser/application-xml.xml b/liteflow-testcase-springnative/src/test/resources/parser/application-xml.xml
index 264d48316..f658f6da7 100644
--- a/liteflow-testcase-springnative/src/test/resources/parser/application-xml.xml
+++ b/liteflow-testcase-springnative/src/test/resources/parser/application-xml.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/liteflow-testcase-springnative/src/test/resources/parser/application-yml.xml b/liteflow-testcase-springnative/src/test/resources/parser/application-yml.xml
index 4a869d5bd..853f95005 100644
--- a/liteflow-testcase-springnative/src/test/resources/parser/application-yml.xml
+++ b/liteflow-testcase-springnative/src/test/resources/parser/application-yml.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/liteflow-testcase-springnative/src/test/resources/zookeeper/application-json.xml b/liteflow-testcase-springnative/src/test/resources/zookeeper/application-json.xml
index 8ee24176c..4e152ca6d 100644
--- a/liteflow-testcase-springnative/src/test/resources/zookeeper/application-json.xml
+++ b/liteflow-testcase-springnative/src/test/resources/zookeeper/application-json.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/liteflow-testcase-springnative/src/test/resources/zookeeper/application-xml.xml b/liteflow-testcase-springnative/src/test/resources/zookeeper/application-xml.xml
index 71b8230ee..ba42bb863 100644
--- a/liteflow-testcase-springnative/src/test/resources/zookeeper/application-xml.xml
+++ b/liteflow-testcase-springnative/src/test/resources/zookeeper/application-xml.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/liteflow-testcase-springnative/src/test/resources/zookeeper/application-yml.xml b/liteflow-testcase-springnative/src/test/resources/zookeeper/application-yml.xml
index a282d0023..512e1a433 100644
--- a/liteflow-testcase-springnative/src/test/resources/zookeeper/application-yml.xml
+++ b/liteflow-testcase-springnative/src/test/resources/zookeeper/application-yml.xml
@@ -9,7 +9,7 @@
-
+
diff --git a/pom.xml b/pom.xml
index 0bbe10c1d..4730da878 100644
--- a/pom.xml
+++ b/pom.xml
@@ -253,7 +253,9 @@
liteflow-testcase-springnative
liteflow-testcase-script-qlexpress
liteflow-testcase-script-groovy
-
+ liteflow-testcase-nospring
+ liteflow-spring
+