mirror of
https://gitee.com/dromara/liteFlow.git
synced 2026-05-14 04:02:09 +08:00
enhancement #ICUEG9 JDK支持度更加平滑
This commit is contained in:
@@ -1,15 +0,0 @@
|
||||
package com.yomahub.liteflow.annotation;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
/**
|
||||
* @author Bryan.Zhang
|
||||
*/
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.METHOD)
|
||||
@Documented
|
||||
public @interface LFAliasFor {
|
||||
|
||||
String value() default "";
|
||||
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.yomahub.liteflow.annotation;
|
||||
|
||||
import cn.hutool.core.annotation.MirrorFor;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
/**
|
||||
@@ -20,10 +22,10 @@ import java.lang.annotation.*;
|
||||
*/
|
||||
public @interface LiteflowRetry {
|
||||
|
||||
@LFAliasFor("retry")
|
||||
@MirrorFor(attribute = "retry")
|
||||
int value() default 0;
|
||||
|
||||
@LFAliasFor("value")
|
||||
@MirrorFor(attribute = "value")
|
||||
int retry() default 0;
|
||||
|
||||
Class<? extends Exception>[] forExceptions() default { Exception.class };
|
||||
|
||||
@@ -1,69 +0,0 @@
|
||||
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 cn.hutool.core.util.StrUtil;
|
||||
import com.yomahub.liteflow.annotation.LFAliasFor;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.lang.reflect.AnnotatedElement;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* 注解工具类
|
||||
* 此工具类带缓存
|
||||
*
|
||||
* @author Bryan.Zhang
|
||||
*/
|
||||
public class AnnoUtil {
|
||||
|
||||
private static Map<String, Annotation> annoCacheMap = new ConcurrentHashMap<>();
|
||||
|
||||
public static <A extends Annotation> A getAnnotation(AnnotatedElement annotatedElement, Class<A> annotationType) {
|
||||
String cacheKey = StrUtil.format("{}-{}", annotatedElement, annotationType.getSimpleName());
|
||||
|
||||
if (annoCacheMap.containsKey(cacheKey)){
|
||||
return (A)annoCacheMap.get(cacheKey);
|
||||
}
|
||||
|
||||
A annotation = AnnotationUtil.getAnnotation(annotatedElement, annotationType);
|
||||
if (ObjectUtil.isNull(annotation)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Map<String, String> aliasMap = new HashMap<>();
|
||||
Map<String, Object> defaultValueMap = new HashMap<>();
|
||||
Arrays.stream(ReflectUtil.getMethods(annotationType)).forEach(method -> {
|
||||
LFAliasFor aliasFor = AnnotationUtil.getAnnotation(method, LFAliasFor.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);
|
||||
}
|
||||
});
|
||||
|
||||
annoCacheMap.put(cacheKey, annotation);
|
||||
|
||||
return annotation;
|
||||
}
|
||||
|
||||
private static <A extends Annotation> Object getDefaultValue(Class<A> annotationType, String property) {
|
||||
try {
|
||||
return annotationType.getMethod(property).getDefaultValue();
|
||||
}
|
||||
catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.yomahub.liteflow.context;
|
||||
|
||||
import com.yomahub.liteflow.annotation.LFAliasFor;
|
||||
import cn.hutool.core.annotation.MirrorFor;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
@@ -15,10 +15,10 @@ import java.lang.annotation.*;
|
||||
@Documented
|
||||
public @interface ContextBean {
|
||||
|
||||
@LFAliasFor("name")
|
||||
@MirrorFor(attribute = "name")
|
||||
String value() default "";
|
||||
|
||||
@LFAliasFor("value")
|
||||
@MirrorFor(attribute = "value")
|
||||
String name() default "";
|
||||
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package com.yomahub.liteflow.core;
|
||||
|
||||
import cn.hutool.core.annotation.AnnotationUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.yomahub.liteflow.annotation.LiteflowRetry;
|
||||
import com.yomahub.liteflow.annotation.util.AnnoUtil;
|
||||
import com.yomahub.liteflow.common.ChainConstant;
|
||||
import com.yomahub.liteflow.enums.NodeTypeEnum;
|
||||
import com.yomahub.liteflow.flow.executor.NodeExecutor;
|
||||
@@ -53,7 +53,7 @@ public class ComponentInitializer {
|
||||
|
||||
// 先从组件上取@RetryCount标注,如果没有,则看全局配置,全局配置如果不配置的话,默认是0
|
||||
// 默认retryForExceptions为Exception.class
|
||||
LiteflowRetry liteFlowRetryAnnotation = AnnoUtil.getAnnotation(nodeComponent.getClass(), LiteflowRetry.class);
|
||||
LiteflowRetry liteFlowRetryAnnotation = AnnotationUtil.getAnnotationAlias(nodeComponent.getClass(), LiteflowRetry.class);
|
||||
LiteflowConfig liteflowConfig = LiteflowConfigGetter.get();
|
||||
if (liteFlowRetryAnnotation != null) {
|
||||
nodeComponent.setRetryCount(liteFlowRetryAnnotation.retry());
|
||||
|
||||
@@ -8,12 +8,12 @@
|
||||
*/
|
||||
package com.yomahub.liteflow.flow;
|
||||
|
||||
import cn.hutool.core.annotation.AnnotationUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.collection.ListUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.yomahub.liteflow.annotation.FallbackCmp;
|
||||
import com.yomahub.liteflow.annotation.util.AnnoUtil;
|
||||
import com.yomahub.liteflow.builder.el.LiteFlowChainELBuilder;
|
||||
import com.yomahub.liteflow.core.ComponentInitializer;
|
||||
import com.yomahub.liteflow.core.NodeComponent;
|
||||
@@ -397,7 +397,7 @@ public class FlowBus {
|
||||
// 判断是否是降级组件,如果是则添加到 fallbackNodeMap
|
||||
private static void addFallbackNode(Node node) {
|
||||
NodeComponent nodeComponent = node.getInstance();
|
||||
FallbackCmp fallbackCmp = AnnoUtil.getAnnotation(nodeComponent.getClass(), FallbackCmp.class);
|
||||
FallbackCmp fallbackCmp = AnnotationUtil.getAnnotation(nodeComponent.getClass(), FallbackCmp.class);
|
||||
if (fallbackCmp == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.yomahub.liteflow.script.annotation;
|
||||
|
||||
import com.yomahub.liteflow.annotation.LFAliasFor;
|
||||
import cn.hutool.core.annotation.MirrorFor;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
@@ -16,10 +16,10 @@ import java.lang.annotation.*;
|
||||
@Inherited
|
||||
public @interface ScriptBean {
|
||||
|
||||
@LFAliasFor("name")
|
||||
@MirrorFor(attribute = "name")
|
||||
String value() default "";
|
||||
|
||||
@LFAliasFor("value")
|
||||
@MirrorFor(attribute = "value")
|
||||
String name() default "";
|
||||
|
||||
String[] includeMethodName() default {};
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package com.yomahub.liteflow.script.annotation;
|
||||
|
||||
import com.yomahub.liteflow.annotation.LFAliasFor;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Inherited;
|
||||
@@ -20,7 +18,6 @@ import java.lang.annotation.Target;
|
||||
@Inherited
|
||||
public @interface ScriptMethod {
|
||||
|
||||
@LFAliasFor("name")
|
||||
String value() default "";
|
||||
|
||||
}
|
||||
|
||||
@@ -7,13 +7,12 @@
|
||||
*/
|
||||
package com.yomahub.liteflow.slot;
|
||||
|
||||
import cn.hutool.core.annotation.AnnotationUtil;
|
||||
import cn.hutool.core.lang.Tuple;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.util.BooleanUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.ReflectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.yomahub.liteflow.annotation.util.AnnoUtil;
|
||||
import com.yomahub.liteflow.context.ContextBean;
|
||||
import com.yomahub.liteflow.log.LFLog;
|
||||
import com.yomahub.liteflow.log.LFLoggerManager;
|
||||
@@ -84,7 +83,7 @@ public class DataBus {
|
||||
|
||||
public static int offerSlotByBean(List<Object> contextList) {
|
||||
List<Tuple> contextBeanList = contextList.stream().filter(Objects::nonNull).map(object -> {
|
||||
ContextBean contextBean = AnnoUtil.getAnnotation(object.getClass(), ContextBean.class);
|
||||
ContextBean contextBean = AnnotationUtil.getAnnotationAlias(object.getClass(), ContextBean.class);
|
||||
String contextKey;
|
||||
if (contextBean != null && StrUtil.isNotBlank(contextBean.value())){
|
||||
contextKey = contextBean.value();
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.yomahub.liteflow.annotation;
|
||||
|
||||
import cn.hutool.core.annotation.MirrorFor;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
/**
|
||||
@@ -14,10 +16,10 @@ import java.lang.annotation.*;
|
||||
@Inherited
|
||||
public @interface LiteflowComponent {
|
||||
|
||||
@LFAliasFor("id")
|
||||
@MirrorFor(attribute = "id")
|
||||
String value() default "";
|
||||
|
||||
@LFAliasFor("value")
|
||||
@MirrorFor(attribute = "value")
|
||||
String id() default "";
|
||||
|
||||
String name() default "";
|
||||
|
||||
@@ -3,17 +3,14 @@ package com.yomahub.liteflow.spi.solon;
|
||||
import cn.hutool.core.annotation.AnnotationUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.yomahub.liteflow.annotation.*;
|
||||
import com.yomahub.liteflow.annotation.util.AnnoUtil;
|
||||
import com.yomahub.liteflow.core.proxy.DeclWarpBean;
|
||||
import com.yomahub.liteflow.core.proxy.MethodWrapBean;
|
||||
import com.yomahub.liteflow.core.proxy.ParameterWrapBean;
|
||||
import com.yomahub.liteflow.enums.NodeTypeEnum;
|
||||
import com.yomahub.liteflow.exception.CmpDefinitionException;
|
||||
import com.yomahub.liteflow.exception.NotSupportDeclException;
|
||||
import com.yomahub.liteflow.spi.DeclComponentParser;
|
||||
import org.noear.solon.Solon;
|
||||
import org.noear.solon.annotation.Component;
|
||||
import org.noear.solon.core.BeanWrap;
|
||||
|
||||
import java.lang.reflect.Parameter;
|
||||
import java.util.Arrays;
|
||||
@@ -39,14 +36,14 @@ public class SolonDeclComponentParser implements DeclComponentParser {
|
||||
method -> AnnotationUtil.getAnnotation(method, LiteflowMethod.class) != null
|
||||
).map(method -> {
|
||||
LiteflowMethod liteflowMethod = AnnotationUtil.getAnnotation(method, LiteflowMethod.class);
|
||||
LiteflowRetry liteflowRetry = AnnotationUtil.getAnnotation(method, LiteflowRetry.class);
|
||||
LiteflowRetry liteflowRetry = AnnotationUtil.getAnnotationAlias(method, LiteflowRetry.class);
|
||||
|
||||
String currNodeId = null;
|
||||
String currNodeName = null;
|
||||
if (nodeId == null){
|
||||
if (StrUtil.isBlank(liteflowMethod.nodeId())){
|
||||
LiteflowComponent liteflowComponent = AnnoUtil.getAnnotation(clazz, LiteflowComponent.class);
|
||||
Component component = AnnoUtil.getAnnotation(clazz, Component.class);
|
||||
LiteflowComponent liteflowComponent = AnnotationUtil.getAnnotationAlias(clazz, LiteflowComponent.class);
|
||||
Component component = AnnotationUtil.getAnnotation(clazz, Component.class);
|
||||
|
||||
if(liteflowComponent != null){
|
||||
currNodeId = liteflowComponent.value();
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.yomahub.liteflow.annotation;
|
||||
|
||||
import cn.hutool.core.annotation.MirrorFor;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.core.annotation.AliasFor;
|
||||
import java.lang.annotation.*;
|
||||
@@ -18,12 +19,10 @@ import java.lang.annotation.*;
|
||||
public @interface LiteflowComponent {
|
||||
|
||||
@AliasFor(annotation = Component.class, attribute = "value")
|
||||
@LFAliasFor("id")
|
||||
String value() default "";
|
||||
String value() default "";
|
||||
|
||||
@AliasFor(annotation = Component.class, attribute = "value")
|
||||
@LFAliasFor("value")
|
||||
String id() default "";
|
||||
String id() default "";
|
||||
|
||||
String name() default "";
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.yomahub.liteflow.process.impl;
|
||||
|
||||
import cn.hutool.core.annotation.AnnotationUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.yomahub.liteflow.annotation.util.AnnoUtil;
|
||||
import com.yomahub.liteflow.process.LiteflowScannerProcessStep;
|
||||
import com.yomahub.liteflow.process.context.LiteflowScannerProcessStepContext;
|
||||
import com.yomahub.liteflow.process.enums.LiteflowScannerProcessStepEnum;
|
||||
@@ -24,7 +24,7 @@ public class ScriptBeanProcess implements LiteflowScannerProcessStep {
|
||||
public boolean filter(LiteflowScannerProcessStepContext ctx) {
|
||||
Class clazz = ctx.getClazz();
|
||||
|
||||
ScriptBean outPut = AnnoUtil.getAnnotation(clazz, ScriptBean.class);
|
||||
ScriptBean outPut = AnnotationUtil.getAnnotationAlias(clazz, ScriptBean.class);
|
||||
ctx.setOutPut(outPut);
|
||||
|
||||
return ObjectUtil.isNotNull(outPut);
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.yomahub.liteflow.process.impl;
|
||||
|
||||
import cn.hutool.core.annotation.AnnotationUtil;
|
||||
import cn.hutool.core.collection.CollStreamUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.yomahub.liteflow.annotation.util.AnnoUtil;
|
||||
import com.yomahub.liteflow.process.LiteflowScannerProcessStep;
|
||||
import com.yomahub.liteflow.process.context.LiteflowScannerProcessStepContext;
|
||||
import com.yomahub.liteflow.process.enums.LiteflowScannerProcessStepEnum;
|
||||
@@ -34,7 +34,7 @@ public class ScriptMethodBeanProcess implements LiteflowScannerProcessStep {
|
||||
Class clazz = ctx.getClazz();
|
||||
|
||||
List<Method> outPut = Arrays.stream(clazz.getMethods()).filter(method -> {
|
||||
ScriptMethod scriptMethod = AnnoUtil.getAnnotation(method, ScriptMethod.class);
|
||||
ScriptMethod scriptMethod = AnnotationUtil.getAnnotation(method, ScriptMethod.class);
|
||||
return ObjectUtil.isNotNull(scriptMethod) && StrUtil.isNotEmpty(scriptMethod.value());
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
@@ -53,7 +53,7 @@ public class ScriptMethodBeanProcess implements LiteflowScannerProcessStep {
|
||||
LOG.info("script method[{}] has been found", beanName);
|
||||
|
||||
Map<String, List<Method>> scriptMethodsGroupByValue = CollStreamUtil.groupBy(scriptMethods, method -> {
|
||||
ScriptMethod scriptMethod = AnnoUtil.getAnnotation(method, ScriptMethod.class);
|
||||
ScriptMethod scriptMethod = AnnotationUtil.getAnnotation(method, ScriptMethod.class);
|
||||
return scriptMethod.value();
|
||||
}, Collectors.toList());
|
||||
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
package com.yomahub.liteflow.spi.spring;
|
||||
|
||||
import cn.hutool.core.annotation.AnnotationUtil;
|
||||
import cn.hutool.core.util.ReflectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.yomahub.liteflow.annotation.*;
|
||||
import com.yomahub.liteflow.annotation.util.AnnoUtil;
|
||||
import com.yomahub.liteflow.core.proxy.DeclWarpBean;
|
||||
import com.yomahub.liteflow.core.proxy.MethodWrapBean;
|
||||
import com.yomahub.liteflow.core.proxy.ParameterWrapBean;
|
||||
@@ -13,13 +11,13 @@ import com.yomahub.liteflow.exception.CmpDefinitionException;
|
||||
import com.yomahub.liteflow.spi.DeclComponentParser;
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.beans.factory.support.RootBeanDefinition;
|
||||
import org.springframework.core.annotation.AnnotationUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.lang.reflect.Parameter;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
@@ -40,14 +38,14 @@ public class SpringDeclComponentParser implements DeclComponentParser {
|
||||
method -> AnnotationUtil.getAnnotation(method, LiteflowMethod.class) != null
|
||||
).map(method -> {
|
||||
LiteflowMethod liteflowMethod = AnnotationUtil.getAnnotation(method, LiteflowMethod.class);
|
||||
LiteflowRetry liteflowRetry = AnnotationUtil.getAnnotation(method, LiteflowRetry.class);
|
||||
LiteflowRetry liteflowRetry = AnnotationUtil.getAnnotationAlias(method, LiteflowRetry.class);
|
||||
|
||||
String currNodeId = null;
|
||||
String currNodeName = null;
|
||||
if (nodeId == null){
|
||||
if (StrUtil.isBlank(liteflowMethod.nodeId())){
|
||||
LiteflowComponent liteflowComponent = AnnoUtil.getAnnotation(clazz, LiteflowComponent.class);
|
||||
Component component = AnnoUtil.getAnnotation(clazz, Component.class);
|
||||
LiteflowComponent liteflowComponent = AnnotationUtils.getAnnotation(clazz, LiteflowComponent.class);
|
||||
Component component = AnnotationUtil.getAnnotation(clazz, Component.class);
|
||||
|
||||
if(liteflowComponent != null){
|
||||
currNodeId = liteflowComponent.value();
|
||||
|
||||
2
pom.xml
2
pom.xml
@@ -52,7 +52,7 @@
|
||||
<dom4j.version>2.1.4</dom4j.version>
|
||||
<curator.version>5.3.0</curator.version>
|
||||
<junit.version>5.8.2</junit.version>
|
||||
<hutool.version>5.8.26</hutool.version>
|
||||
<hutool.version>5.8.39</hutool.version>
|
||||
<transmittable-thread-local.version>2.14.5</transmittable-thread-local.version>
|
||||
<curator-test.version>5.1.0</curator-test.version>
|
||||
<zkclient.version>0.10</zkclient.version>
|
||||
|
||||
Reference in New Issue
Block a user