diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboOpenFeignAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboOpenFeignAutoConfiguration.java
new file mode 100644
index 00000000..7b0c4c97
--- /dev/null
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboOpenFeignAutoConfiguration.java
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springframework.cloud.alibaba.dubbo.autoconfigure;
+
+import feign.Feign;
+import feign.RequestInterceptor;
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.context.event.ApplicationReadyEvent;
+import org.springframework.cloud.alibaba.dubbo.openfeign.DubboFeignClientsConfiguration;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.cloud.openfeign.FeignAutoConfiguration;
+import org.springframework.cloud.openfeign.FeignContext;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.event.EventListener;
+
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import static org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboOpenFeignAutoConfiguration.FEIGN_CLIENT_FACTORY_BEAN_CLASS_NAME;
+
+
+/**
+ * Dubbo Feign Auto-{@link Configuration Configuration}
+ *
+ * @author Mercy
+ */
+@ConditionalOnClass(value = Feign.class, name = FEIGN_CLIENT_FACTORY_BEAN_CLASS_NAME)
+@EnableFeignClients(defaultConfiguration = DubboFeignClientsConfiguration.class)
+@AutoConfigureAfter(FeignAutoConfiguration.class)
+@Configuration
+public class DubboOpenFeignAutoConfiguration {
+
+ static final String FEIGN_CLIENT_FACTORY_BEAN_CLASS_NAME =
+ "org.springframework.cloud.openfeign.FeignClientFactoryBean";
+
+ @Autowired
+ private ObjectProvider feignContextObjectProvider;
+
+ @EventListener(ApplicationReadyEvent.class)
+ public void onContextRefreshed(ApplicationReadyEvent event) {
+ ConfigurableApplicationContext applicationContext = event.getApplicationContext();
+ // Resolve the subscribed service names for @FeignClient
+ Set feignClientServiceNames = resolveFeignClientServiceNames(applicationContext);
+ // FeignContext
+ FeignContext feignContext = feignContextObjectProvider.getIfAvailable();
+
+ }
+
+ /**
+ * Resolve the subscribed service names for @FeignClient
+ *
+ * @param applicationContext Current {@link ConfigurableApplicationContext}
+ * @return non-null {@link Set}
+ */
+ private Set resolveFeignClientServiceNames(ConfigurableApplicationContext applicationContext) {
+ Set feignClientServiceNames = new LinkedHashSet<>();
+ ConfigurableListableBeanFactory beanFactory = applicationContext.getBeanFactory();
+ for (String beanName : beanFactory.getBeanDefinitionNames()) {
+ BeanDefinition beanDefinition = beanFactory.getBeanDefinition(beanName);
+ if (FEIGN_CLIENT_FACTORY_BEAN_CLASS_NAME.equals(beanDefinition.getBeanClassName())) {
+ String feignClientServiceName = (String) beanDefinition.getPropertyValues().get("name");
+ feignClientServiceNames.add(feignClientServiceName);
+ }
+ }
+ return feignClientServiceNames;
+ }
+
+ @Bean
+ public RequestInterceptor requestInterceptor() {
+ return template -> {
+ System.out.println(template);
+ };
+ }
+
+}
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboRestAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboRestAutoConfiguration.java
index 90ee3079..775f706b 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboRestAutoConfiguration.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboRestAutoConfiguration.java
@@ -19,8 +19,8 @@ package org.springframework.cloud.alibaba.dubbo.autoconfigure;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.autoconfigure.AutoConfigureOrder;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.cloud.alibaba.dubbo.rest.feign.RestMetadataConfigService;
import org.springframework.cloud.alibaba.dubbo.rest.feign.RestMetadataResolver;
-import org.springframework.cloud.alibaba.dubbo.util.MetadataConfigUtils;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
@@ -46,7 +46,8 @@ public class DubboRestAutoConfiguration {
}
@Bean
- public MetadataConfigUtils metadataConfigUtils() {
- return new MetadataConfigUtils();
+ public RestMetadataConfigService restMetadataConfigService() {
+ return new RestMetadataConfigService();
}
+
}
\ No newline at end of file
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboRestDiscoveryAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboRestDiscoveryAutoConfiguration.java
index 8cf682f7..25ceaf0d 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboRestDiscoveryAutoConfiguration.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboRestDiscoveryAutoConfiguration.java
@@ -20,42 +20,28 @@ import com.alibaba.boot.dubbo.autoconfigure.DubboAutoConfiguration;
import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.spring.ReferenceBean;
+import com.fasterxml.jackson.databind.ObjectMapper;
import feign.Client;
import feign.Request;
-import feign.RequestInterceptor;
import feign.Response;
-import org.codehaus.jackson.map.ObjectMapper;
import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.cloud.alibaba.dubbo.rest.feign.RestMetadataConfigService;
import org.springframework.cloud.alibaba.dubbo.rest.feign.RestMetadataResolver;
-import org.springframework.cloud.alibaba.dubbo.rest.metadata.ServiceRestMetadata;
-import org.springframework.cloud.alibaba.dubbo.util.MetadataConfigUtils;
-import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
-import org.springframework.cloud.client.discovery.event.InstanceRegisteredEvent;
-import org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration;
-import org.springframework.cloud.client.serviceregistry.Registration;
-import org.springframework.cloud.context.named.NamedContextFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.context.event.ContextRefreshedEvent;
-import org.springframework.context.event.EventListener;
-import org.springframework.util.ReflectionUtils;
import org.springframework.util.StringUtils;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
import java.util.Map;
-import java.util.Set;
/**
* The Auto-Configuration class for Dubbo REST Discovery
@@ -70,6 +56,9 @@ import java.util.Set;
@Configuration
public class DubboRestDiscoveryAutoConfiguration {
+ private static final String FEIGN_CLIENT_FACTORY_BEAN_CLASS_NAME =
+ "org.springframework.cloud.openfeign.FeignClientFactoryBean";
+
@Autowired
private DiscoveryClient discoveryClient;
@@ -94,119 +83,7 @@ public class DubboRestDiscoveryAutoConfiguration {
private String nacosServerAddress;
@Autowired
- private ListableBeanFactory beanFactory;
-
- @Autowired
- private MetadataConfigUtils metadataConfigUtils;
-
- /**
- * Handle on self instance registered.
- *
- * @param event {@link InstanceRegisteredEvent}
- */
- @EventListener(InstanceRegisteredEvent.class)
- public void onSelfInstanceRegistered(InstanceRegisteredEvent event) throws Exception {
-
- Class> targetClass = AbstractAutoServiceRegistration.class;
-
- Object source = event.getSource();
-
- if (!targetClass.isInstance(source)) {
- return;
- }
-
- // getRegistration() is a protected method
- Method method = targetClass.getDeclaredMethod("getRegistration");
-
- method.setAccessible(true);
-
- Registration registration = (Registration) ReflectionUtils.invokeMethod(method, source);
-
- String serviceRestMetaData =
- metadataConfigUtils.getServiceRestMetadata(registration.getServiceId());
-
- Set metadata = objectMapper.readValue(serviceRestMetaData, Set.class);
-
- System.out.println(serviceRestMetaData);
-
- }
-
- @Bean
- public RequestInterceptor requestInterceptor() {
- return template -> {
- System.out.println(template);
- };
- }
-
- private void noop() {
- Map specifications =
- beanFactory.getBeansOfType(NamedContextFactory.Specification.class);
- // 1. Get all service names from Spring beans that was annotated by @FeignClient
- List serviceNames = new LinkedList<>();
-
- specifications.forEach((beanName, specification) ->
-
- {
- String serviceName = beanName.substring(0, beanName.indexOf("."));
- serviceNames.add(serviceName);
-
- // 2. Get all service instances by echo specified service name
- List serviceInstances = discoveryClient.getInstances(serviceName);
- if (!serviceInstances.isEmpty()) {
- ServiceInstance serviceInstance = serviceInstances.get(0);
- // 3. Get Rest metadata from service instance
- Map metadata = serviceInstance.getMetadata();
- // 4. Resolve REST metadata from the @FeignClient instance
- String restMetadataJson = metadata.get("restMetadata");
- /**
- * {
- * "providers:org.springframework.cloud.alibaba.dubbo.service.EchoService:1.0.0": [
- * "{\"method\":\"POST\",\"url\":\"/plus?a={a}&b={b}\",\"headers\":{}}",
- * "{\"method\":\"GET\",\"url\":\"/echo?message={message}\",\"headers\":{}}"
- * ]
- * }
- */
- try {
- Map> restMetadata = objectMapper.readValue(restMetadataJson, Map.class);
-
- restMetadata.forEach((dubboServiceName, restJsons) -> {
- restJsons.stream().map(restMetadataResolver::resolveRequest).forEach(request -> {
- referenceBeanCache.put(request.toString(), buildReferenceBean(dubboServiceName));
- });
- });
-
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
-
- //
- }
- });
- }
-
- private ReferenceBean buildReferenceBean(ServiceInstance serviceInstance) {
-
- ReferenceBean referenceBean = new ReferenceBean();
- Map metadata = serviceInstance.getMetadata();
- // 4. Resolve REST metadata from the @FeignClient instance
- String restMetadataJson = metadata.get("restMetadata");
-
- try {
- Map> restMetadata = objectMapper.readValue(restMetadataJson, Map.class);
-
- restMetadata.forEach((dubboServiceName, restJsons) -> {
- restJsons.stream().map(restMetadataResolver::resolveRequest).forEach(request -> {
- referenceBeanCache.put(request.toString(), buildReferenceBean(dubboServiceName));
- });
- });
-
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
-
- return referenceBean;
- }
-
+ private RestMetadataConfigService restMetadataConfigService;
private ReferenceBean buildReferenceBean(String dubboServiceName) {
ReferenceBean referenceBean = new ReferenceBean();
@@ -271,10 +148,122 @@ public class DubboRestDiscoveryAutoConfiguration {
}
- @EventListener(ContextRefreshedEvent.class)
- public void onContextRefreshed(ContextRefreshedEvent event) {
-
- }
-
-
}
+
+
+// private Method getRegistrationMethod;
+//
+// @PostConstruct
+// public void init() throws NoSuchMethodException {
+// getRegistrationMethod = initGetRegistrationMethod();
+// }
+//
+// /**
+// * Initializes {@link AbstractAutoServiceRegistration#getRegistration() getRegistration method} that is is protected.
+// *
+// * @return {@link Method}
+// * @throws NoSuchMethodException
+// */
+// private Method initGetRegistrationMethod() throws NoSuchMethodException {
+// Method method = AbstractAutoServiceRegistration.class.getDeclaredMethod("getRegistration");
+// method.setAccessible(true);
+// return method;
+// }
+//
+// private Registration getRegistration(AbstractAutoServiceRegistration source) {
+// return (Registration) ReflectionUtils.invokeMethod(getRegistrationMethod, source);
+// }
+//
+// private void noop() {
+// Map specifications =
+// beanFactory.getBeansOfType(NamedContextFactory.Specification.class);
+// // 1. Get all service names from Spring beans that was annotated by @FeignClient
+// List serviceNames = new LinkedList<>();
+//
+// specifications.forEach((beanName, specification) ->
+//
+// {
+// String serviceName = beanName.substring(0, beanName.indexOf("."));
+// serviceNames.add(serviceName);
+//
+// // 2. Get all service instances by echo specified service name
+// List serviceInstances = discoveryClient.getInstances(serviceName);
+// if (!serviceInstances.isEmpty()) {
+// ServiceInstance serviceInstance = serviceInstances.get(0);
+// // 3. Get Rest metadata from service instance
+// Map metadata = serviceInstance.getMetadata();
+// // 4. Resolve REST metadata from the @FeignClient instance
+// String restMetadataJson = metadata.get("restMetadata");
+// /**
+// * {
+// * "providers:org.springframework.cloud.alibaba.dubbo.service.EchoService:1.0.0": [
+// * "{\"method\":\"POST\",\"url\":\"/plus?a={a}&b={b}\",\"headers\":{}}",
+// * "{\"method\":\"GET\",\"url\":\"/echo?message={message}\",\"headers\":{}}"
+// * ]
+// * }
+// */
+// try {
+// Map> restMetadata = objectMapper.readValue(restMetadataJson, Map.class);
+//
+// restMetadata.forEach((dubboServiceName, restJsons) -> {
+// restJsons.stream().map(restMetadataResolver::resolveRequest).forEach(request -> {
+// referenceBeanCache.put(request.toString(), buildReferenceBean(dubboServiceName));
+// });
+// });
+//
+// } catch (IOException e) {
+// throw new RuntimeException(e);
+// }
+//
+// //
+// }
+// });
+// }
+//
+// private ReferenceBean buildReferenceBean(ServiceInstance serviceInstance) {
+//
+// ReferenceBean referenceBean = new ReferenceBean();
+// Map metadata = serviceInstance.getMetadata();
+// // 4. Resolve REST metadata from the @FeignClient instance
+// String restMetadataJson = metadata.get("restMetadata");
+//
+// try {
+// Map> restMetadata = objectMapper.readValue(restMetadataJson, Map.class);
+//
+// restMetadata.forEach((dubboServiceName, restJsons) -> {
+// restJsons.stream().map(restMetadataResolver::resolveRequest).forEach(request -> {
+// referenceBeanCache.put(request.toString(), buildReferenceBean(dubboServiceName));
+// });
+// });
+//
+// } catch (IOException e) {
+// throw new RuntimeException(e);
+// }
+//
+// return referenceBean;
+// }
+
+// /**
+// * Handle on self instance registered.
+// *
+// * @param event {@link InstanceRegisteredEvent}
+// */
+// @EventListener(InstanceRegisteredEvent.class)
+// public void onSelfInstanceRegistered(InstanceRegisteredEvent event) throws Exception {
+//
+// Class> targetClass = AbstractAutoServiceRegistration.class;
+//
+// Object source = event.getSource();
+//
+// Assert.isInstanceOf(targetClass, source,
+// format("The source of %s must implement %s", source, targetClass.getName()));
+//
+// Registration registration = getRegistration((AbstractAutoServiceRegistration) source);
+//
+// String serviceRestMetaDataConfig =
+// restMetadataConfigService.getServiceRestMetadata(registration.getServiceId());
+//
+// Set serviceRestMetadata = objectMapper.readValue(serviceRestMetaDataConfig,
+// TypeFactory.defaultInstance().constructCollectionType(Set.class, ServiceRestMetadata.class));
+//
+// }
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboRestMetadataRegistrationAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboRestMetadataRegistrationAutoConfiguration.java
index 8c225b0e..2b901e6f 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboRestMetadataRegistrationAutoConfiguration.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboRestMetadataRegistrationAutoConfiguration.java
@@ -20,21 +20,18 @@ import com.alibaba.dubbo.config.spring.ServiceBean;
import com.alibaba.dubbo.config.spring.context.event.ServiceBeanExportedEvent;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
-import org.springframework.beans.factory.BeanClassLoaderAware;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.cloud.alibaba.dubbo.rest.feign.RestMetadataConfigService;
import org.springframework.cloud.alibaba.dubbo.rest.feign.RestMetadataResolver;
import org.springframework.cloud.alibaba.dubbo.rest.metadata.ServiceRestMetadata;
-import org.springframework.cloud.alibaba.dubbo.util.MetadataConfigUtils;
import org.springframework.cloud.client.discovery.event.InstancePreRegisteredEvent;
import org.springframework.cloud.client.serviceregistry.Registration;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.EventListener;
-import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
-import java.util.Map;
import java.util.Set;
/**
@@ -48,18 +45,14 @@ import java.util.Set;
@AutoConfigureAfter(value = {
DubboRestAutoConfiguration.class, DubboServiceRegistrationAutoConfiguration.class})
@Configuration
-public class DubboRestMetadataRegistrationAutoConfiguration implements BeanClassLoaderAware {
+public class DubboRestMetadataRegistrationAutoConfiguration {
/**
* A Map to store REST metadata temporary, its' key is the special service name for a Dubbo service,
* the value is a JSON content of JAX-RS or Spring MVC REST metadata from the annotated methods.
*/
- private final Map>> restMetadata = new LinkedHashMap<>();
-
private final Set serviceRestMetadata = new LinkedHashSet<>();
- private ClassLoader classLoader;
-
@Autowired
private ObjectMapper objectMapper;
@@ -67,14 +60,12 @@ public class DubboRestMetadataRegistrationAutoConfiguration implements BeanClass
private RestMetadataResolver restMetadataResolver;
@Autowired
- private MetadataConfigUtils metadataConfigUtils;
+ private RestMetadataConfigService metadataConfigService;
@EventListener(ServiceBeanExportedEvent.class)
public void recordRestMetadata(ServiceBeanExportedEvent event) throws JsonProcessingException {
ServiceBean serviceBean = event.getServiceBean();
-// Map>> metadata = restMetadataResolver.resolve(serviceBean);
-// restMetadata.putAll(metadata);
serviceRestMetadata.addAll(restMetadataResolver.resolve(serviceBean));
}
@@ -93,15 +84,8 @@ public class DubboRestMetadataRegistrationAutoConfiguration implements BeanClass
String restMetadataJson = objectMapper.writeValueAsString(serviceRestMetadata);
- metadataConfigUtils.publishServiceRestMetadata(registration.getServiceId(), restMetadataJson);
+ metadataConfigService.publishServiceRestMetadata(registration.getServiceId(), restMetadataJson);
}
-
- @Override
- public void setBeanClassLoader(ClassLoader classLoader) {
- this.classLoader = classLoader;
- }
-
-
}
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/DubboFeignClientsConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/DubboFeignClientsConfiguration.java
new file mode 100644
index 00000000..6fa4a978
--- /dev/null
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/DubboFeignClientsConfiguration.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springframework.cloud.alibaba.dubbo.openfeign;
+
+import feign.Feign;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.BeanPostProcessor;
+import org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboOpenFeignAutoConfiguration;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.cloud.openfeign.FeignClientsConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.List;
+
+/**
+ * Dubbo {@link Configuration} for {@link FeignClient FeignClients}
+ *
+ * @author Mercy
+ * @see DubboOpenFeignAutoConfiguration
+ * @see org.springframework.cloud.openfeign.FeignContext#setConfigurations(List)
+ * @see FeignClientsConfiguration
+ */
+@Configuration
+public class DubboFeignClientsConfiguration {
+
+ @Bean
+ public BeanPostProcessor beanPostProcessor() {
+ return new BeanPostProcessor() {
+ @Override
+ public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
+ if (bean instanceof Feign.Builder) {
+ Feign.Builder builder = (Feign.Builder) bean;
+ Feign feign = builder.build();
+ }
+ return bean;
+ }
+ };
+ }
+
+
+}
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/util/MetadataConfigUtils.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/rest/feign/RestMetadataConfigService.java
similarity index 94%
rename from spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/util/MetadataConfigUtils.java
rename to spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/rest/feign/RestMetadataConfigService.java
index 5fe71b3a..d66a6947 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/util/MetadataConfigUtils.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/rest/feign/RestMetadataConfigService.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.springframework.cloud.alibaba.dubbo.util;
+package org.springframework.cloud.alibaba.dubbo.rest.feign;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.exception.NacosException;
@@ -26,9 +26,9 @@ import javax.annotation.PostConstruct;
import static com.alibaba.nacos.api.common.Constants.DEFAULT_GROUP;
/**
- * TODO
+ * Rest Metadata Config Service
*/
-public class MetadataConfigUtils {
+public class RestMetadataConfigService {
@Autowired
private NacosConfigProperties nacosConfigProperties;
diff --git a/spring-cloud-alibaba-dubbo/src/main/resources/META-INF/spring.factories b/spring-cloud-alibaba-dubbo/src/main/resources/META-INF/spring.factories
index e3cb78bf..1df5be4d 100644
--- a/spring-cloud-alibaba-dubbo/src/main/resources/META-INF/spring.factories
+++ b/spring-cloud-alibaba-dubbo/src/main/resources/META-INF/spring.factories
@@ -1,5 +1,6 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboRestAutoConfiguration,\
+ org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboOpenFeignAutoConfiguration,\
org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboServiceRegistrationAutoConfiguration,\
org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboRestMetadataRegistrationAutoConfiguration,\
org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboRestDiscoveryAutoConfiguration
diff --git a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudBootstrap.java b/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudBootstrap.java
index 4445e880..08de6e2b 100644
--- a/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudBootstrap.java
+++ b/spring-cloud-alibaba-dubbo/src/test/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudBootstrap.java
@@ -22,21 +22,17 @@ import com.alibaba.dubbo.config.annotation.Reference;
import com.alibaba.dubbo.config.spring.ReferenceBean;
import com.alibaba.dubbo.config.spring.ServiceBean;
import com.alibaba.dubbo.config.spring.context.event.ServiceBeanExportedEvent;
-
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.alibaba.dubbo.service.EchoService;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@@ -71,15 +67,15 @@ public class DubboSpringCloudBootstrap {
String echo(@RequestParam("message") String message);
}
- @Bean
- public ApplicationRunner applicationRunner() {
- return arguments -> {
- // Dubbo Service call
- System.out.println(echoService.echo("mercyblitz"));
- // Spring Cloud Open Feign REST Call
- System.out.println(feignEchoService.echo("mercyblitz"));
- };
- }
+// @Bean
+// public ApplicationRunner applicationRunner() {
+// return arguments -> {
+// // Dubbo Service call
+// System.out.println(echoService.echo("mercyblitz"));
+// // Spring Cloud Open Feign REST Call
+// System.out.println(feignEchoService.echo("mercyblitz"));
+// };
+// }
@Autowired