enhancement #ICUEG9 JDK支持度更加平滑

This commit is contained in:
everywhere.z
2025-08-24 00:33:09 +08:00
parent 814c1409e2
commit 60739dd544
16 changed files with 36 additions and 126 deletions

View File

@@ -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 "";
}

View File

@@ -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 };

View File

@@ -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;
}
}
}

View File

@@ -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 "";
}

View File

@@ -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());

View File

@@ -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;
}

View File

@@ -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 {};

View File

@@ -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 "";
}

View File

@@ -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();

View File

@@ -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 "";

View File

@@ -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();

View File

@@ -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 "";

View File

@@ -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);

View File

@@ -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());

View File

@@ -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();

View File

@@ -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>