From 1ede1458b9641d862ce75a67150af3a5a7d6037e Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Wed, 2 Dec 2015 11:36:48 -0700 Subject: [PATCH] Get RequestInterceptors from feign context. Rather than pulling them from the generic context. fixes gh-683 --- .../netflix/feign/FeignClientFactory.java | 9 +++++ .../netflix/feign/FeignClientFactoryBean.java | 2 +- .../netflix/feign/valid/FeignClientTests.java | 39 +++++++++++-------- 3 files changed, 33 insertions(+), 17 deletions(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientFactory.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientFactory.java index 590e4550..08ada02b 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientFactory.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientFactory.java @@ -117,4 +117,13 @@ public class FeignClientFactory implements DisposableBean, ApplicationContextAwa return null; } + + public Map getInstances(String name, Class type) { + AnnotationConfigApplicationContext context = getContext(name); + if (BeanFactoryUtils.beanNamesForTypeIncludingAncestors(context, type).length > 0) { + return context.getBeansOfType(type); + } + return null; + } + } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientFactoryBean.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientFactoryBean.java index a1900059..67e651a4 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientFactoryBean.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/FeignClientFactoryBean.java @@ -100,7 +100,7 @@ class FeignClientFactoryBean implements FactoryBean, InitializingBean, A if (options != null) { builder.options(options); } - Map requestInterceptors = this.context.getBeansOfType(RequestInterceptor.class); + Map requestInterceptors = factory.getInstances(this.name, RequestInterceptor.class); if (requestInterceptors != null) { builder.requestInterceptors(requestInterceptors.values()); } diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/valid/FeignClientTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/valid/FeignClientTests.java index 3ba3ccd5..4954285c 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/valid/FeignClientTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/valid/FeignClientTests.java @@ -45,6 +45,7 @@ import org.springframework.cloud.netflix.feign.EnableFeignClients; import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.cloud.netflix.feign.ribbon.LoadBalancerFeignClient; import org.springframework.cloud.netflix.ribbon.RibbonClient; +import org.springframework.cloud.netflix.ribbon.RibbonClients; import org.springframework.cloud.netflix.ribbon.StaticServerList; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -92,9 +93,8 @@ public class FeignClientTests { @Autowired private Client feignClient; - // @FeignClient(value = "http://localhost:9876", loadbalance = false) - @FeignClient("localapp") - protected static interface TestClient { + @FeignClient(value = "localapp", configuration = TestClientConfig.class) + protected interface TestClient { @RequestMapping(method = RequestMethod.GET, value = "/hello") Hello getHello(); @@ -120,19 +120,7 @@ public class FeignClientTests { ResponseEntity head(); } - @FeignClient(serviceId = "localapp") - protected static interface TestClientServiceId { - @RequestMapping(method = RequestMethod.GET, value = "/hello") - Hello getHello(); - } - - @Configuration - @EnableAutoConfiguration - @RestController - @EnableFeignClients(clients = {TestClientServiceId.class, TestClient.class}, - defaultConfiguration = TestDefaultFeignConfig.class) - @RibbonClient(name = "localapp", configuration = LocalRibbonClientConfiguration.class) - protected static class Application { + public static class TestClientConfig { @Bean public RequestInterceptor interceptor1() { @@ -153,6 +141,25 @@ public class FeignClientTests { } }; } + } + + @FeignClient(name = "localapp1") + protected interface TestClientServiceId { + @RequestMapping(method = RequestMethod.GET, value = "/hello") + Hello getHello(); + } + + @Configuration + @EnableAutoConfiguration + @RestController + @EnableFeignClients(clients = {TestClientServiceId.class, TestClient.class}, + defaultConfiguration = TestDefaultFeignConfig.class) + @RibbonClients({ + @RibbonClient(name = "localapp", configuration = LocalRibbonClientConfiguration.class), + @RibbonClient(name = "localapp1", configuration = LocalRibbonClientConfiguration.class) + }) + protected static class Application { + @RequestMapping(method = RequestMethod.GET, value = "/hello") public Hello getHello() {