diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java index 53b3eadb355..fe25f46f1e2 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/AbstractInterfaceConfig.java @@ -27,6 +27,7 @@ import org.apache.dubbo.common.utils.ClassUtils; import org.apache.dubbo.common.utils.CollectionUtils; import org.apache.dubbo.common.utils.ConfigUtils; +import org.apache.dubbo.common.utils.JsonUtils; import org.apache.dubbo.common.utils.ReflectUtils; import org.apache.dubbo.common.utils.StringUtils; import org.apache.dubbo.config.support.Parameter; @@ -758,6 +759,16 @@ public void setMethods(List methods) { this.methods = (methods != null) ? new ArrayList<>(methods) : null; } + public void setMethodsJson(List methodsJson) { + if (methodsJson != null) { + this.methods = new ArrayList<>(); + methodsJson.forEach( + (methodConfigJson) -> methods.add(JsonUtils.toJavaObject(methodConfigJson, MethodConfig.class))); + } else { + this.methods = null; + } + } + public void addMethod(MethodConfig methodConfig) { if (this.methods == null) { this.methods = new ArrayList<>(); diff --git a/dubbo-common/src/main/java/org/apache/dubbo/config/MethodConfig.java b/dubbo-common/src/main/java/org/apache/dubbo/config/MethodConfig.java index 000b447cac9..7cdc83db9bb 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/config/MethodConfig.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/config/MethodConfig.java @@ -217,9 +217,8 @@ public List getPrefixes() { List prefixes = new ArrayList<>(); prefixes.add(parentPrefix + "." + this.getName()); return prefixes; - } else { - throw new IllegalStateException("The parent prefix of MethodConfig is null"); } + return null; } @Override diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/aot/AotWithSpringDetector.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/aot/AotWithSpringDetector.java index 3bda2719d08..1ee9ef3f2ec 100644 --- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/aot/AotWithSpringDetector.java +++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/aot/AotWithSpringDetector.java @@ -30,6 +30,8 @@ public abstract class AotWithSpringDetector { */ public static final String AOT_ENABLED = "spring.aot.enabled"; + private static final String AOT_PROCESSING = "spring.aot.processing"; + /** * Determine whether AOT optimizations must be considered at runtime. This * is mandatory in a native image but can be triggered on the JVM using @@ -40,4 +42,8 @@ public abstract class AotWithSpringDetector { public static boolean useGeneratedArtifacts() { return (NativeDetector.inNativeImage() || SpringProperties.getFlag(AOT_ENABLED)); } + + public static boolean isAotProcessing() { + return (NativeDetector.inNativeImage() || SpringProperties.getFlag(AOT_PROCESSING)); + } } diff --git a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationPostProcessor.java b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationPostProcessor.java index ddfc9424da9..0c0af139cd2 100644 --- a/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationPostProcessor.java +++ b/dubbo-config/dubbo-config-spring/src/main/java/org/apache/dubbo/config/spring/beans/factory/annotation/ServiceAnnotationPostProcessor.java @@ -21,6 +21,7 @@ import org.apache.dubbo.common.logger.LoggerFactory; import org.apache.dubbo.common.utils.AnnotationUtils; import org.apache.dubbo.common.utils.ClassUtils; +import org.apache.dubbo.common.utils.JsonUtils; import org.apache.dubbo.common.utils.ReflectUtils; import org.apache.dubbo.common.utils.StringUtils; import org.apache.dubbo.config.Constants; @@ -486,7 +487,13 @@ private AbstractBeanDefinition buildServiceBeanDefinition( // Add methods parameters List methodConfigs = convertMethodConfigs(serviceAnnotationAttributes.get("methods")); if (!methodConfigs.isEmpty()) { - builder.addPropertyValue("methods", methodConfigs); + if (AotWithSpringDetector.isAotProcessing()) { + List methodsJson = new ArrayList<>(); + methodConfigs.forEach(methodConfig -> methodsJson.add(JsonUtils.toJson(methodConfig))); + builder.addPropertyValue("methodsJson", methodsJson); + } else { + builder.addPropertyValue("methods", methodConfigs); + } } // convert provider to providerIds