public void registerShenyuClients(final AnnotationMetadata metadata, final BeanDefinitionRegistry registry) {
        Set<BeanDefinition> candidateComponents = new LinkedHashSet<>();
        Map<String, Object> attrs = metadata.getAnnotationAttributes(EnableShenyuClients.class.getName());
        final Class<?>[] clients = Objects.isNull(attrs) ? null : (Class<?>[]) attrs.get("clients");
        LOG.info("clients:{}", JsonUtils.toJson(clients));
        if (Objects.isNull(clients) || clients.length == 0) {
            ClassPathScanningCandidateComponentProvider scanner = getScanner();
            scanner.setResourceLoader(this.resourceLoader);
            scanner.addIncludeFilter(new AnnotationTypeFilter(ShenyuClient.class));
            Set<String> basePackages = getBasePackages(metadata);
            LOG.info("basePackages:{}", JsonUtils.toJson(basePackages));
            for (String basePackage : basePackages) {
                candidateComponents.addAll(scanner.findCandidateComponents(basePackage));
            }
        } else {
            for (Class<?> clazz : clients) {
                candidateComponents.add(new AnnotatedGenericBeanDefinition(clazz));
            }
        }

        for (BeanDefinition candidateComponent : candidateComponents) {
            if (candidateComponent instanceof AnnotatedBeanDefinition) {
                // verify annotated class is an interface
                AnnotatedBeanDefinition beanDefinition = (AnnotatedBeanDefinition) candidateComponent;
                AnnotationMetadata annotationMetadata = beanDefinition.getMetadata();
                Assert.isTrue(annotationMetadata.isInterface(), "@ShenyuClient can only be specified on an interface " + candidateComponent.getBeanClassName());

                Map<String, Object> attributes = annotationMetadata
                                                     .getAnnotationAttributes(ShenyuClient.class.getCanonicalName());

                String name = getClientName(attributes);
                LOG.info("configuration, attributes:{}", JsonUtils.toJson(attributes));
//                registerClientConfiguration(registry, name, attributes.get("configuration"));
                registerShenyuClient(registry, annotationMetadata, attributes);
            }
        }
    }
Register shenyu clients.
@param metadata the metadata
@param registry the registry
shenyu-sdk/shenyu-sdk-feign/src/main/java/org/apache/shenyu/sdk/feign/ShenyuClientsRegistrar.java