From ad2c3cc97ae9478a02e1b5f792bf329d8c78c77a Mon Sep 17 00:00:00 2001 From: diguage <leejun119@gmail.com> Date: Sat, 19 Oct 2024 10:57:20 +0800 Subject: [PATCH] extract packages from SpringBootApplication or ComponentScan if EnableFeignClients does not set basePackages or basePackageClasses --- .../openfeign/FeignClientsRegistrar.java | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignClientsRegistrar.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignClientsRegistrar.java index 00fe8f195..c4c1c098a 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignClientsRegistrar.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/FeignClientsRegistrar.java @@ -410,6 +410,65 @@ protected Set<String> getBasePackages(AnnotationMetadata importingClassMetadata) basePackages.add(ClassUtils.getPackageName(clazz)); } + if (basePackages.isEmpty()) { + // org.springframework.boot.autoconfigure.SpringBootApplication + String bootAppClassName = "org.springframework.boot.autoconfigure.SpringBootApplication"; + if (importingClassMetadata.hasAnnotation(bootAppClassName)){ + Map<String, Object> bootAttributes = importingClassMetadata + .getAnnotationAttributes(bootAppClassName); + for (String pkg : (String[]) bootAttributes.get("scanBasePackages")) { + if (StringUtils.hasText(pkg)) { + basePackages.add(pkg); + } + } + for (Class<?> clazz : (Class[]) bootAttributes.get("scanBasePackageClasses")) { + basePackages.add(ClassUtils.getPackageName(clazz)); + } + } + + String componentScanClassName = "org.springframework.context.annotation.ComponentScan"; + if (importingClassMetadata.hasAnnotation(componentScanClassName)) { + Map<String, Object> scanAttributes = importingClassMetadata + .getAnnotationAttributes(componentScanClassName); + for (String pkg : (String[]) scanAttributes.get("value")) { + if (StringUtils.hasText(pkg)) { + basePackages.add(pkg); + } + } + for (String pkg : (String[]) scanAttributes.get("basePackages")) { + if (StringUtils.hasText(pkg)) { + basePackages.add(pkg); + } + } + for (Class<?> clazz : (Class[]) scanAttributes.get("basePackageClasses")) { + basePackages.add(ClassUtils.getPackageName(clazz)); + } + } + + String componentScansClassName = "org.springframework.context.annotation.ComponentScans"; + if (importingClassMetadata.hasAnnotation(componentScansClassName)) { + Map<String, Object> componentScansAttrs = + importingClassMetadata.getAnnotationAttributes(componentScansClassName); + AnnotationAttributes[] componentScanAttributes = + (AnnotationAttributes[]) componentScansAttrs.get("value"); + for (AnnotationAttributes scanAttributes : componentScanAttributes) { + for (String pkg : (String[]) scanAttributes.get("value")) { + if (StringUtils.hasText(pkg)) { + basePackages.add(pkg); + } + } + for (String pkg : (String[]) scanAttributes.get("basePackages")) { + if (StringUtils.hasText(pkg)) { + basePackages.add(pkg); + } + } + for (Class<?> clazz : (Class[]) scanAttributes.get("basePackageClasses")) { + basePackages.add(ClassUtils.getPackageName(clazz)); + } + } + } + } + if (basePackages.isEmpty()) { basePackages.add(ClassUtils.getPackageName(importingClassMetadata.getClassName())); }