diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonAutoConfiguration.java index c58d0a21..a6fec650 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonAutoConfiguration.java @@ -1,5 +1,9 @@ package org.springframework.cloud.netflix.ribbon; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -13,51 +17,56 @@ import org.springframework.web.client.RestTemplate; import com.netflix.loadbalancer.BaseLoadBalancer; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - /** * @author Spencer Gibb */ @Configuration @AutoConfigureAfter(EurekaClientAutoConfiguration.class) public class RibbonAutoConfiguration { - - @Autowired(required=false) + + @Autowired(required = false) private List balancers = Collections.emptyList(); - @Autowired(required=false) + @Autowired private EurekaRibbonClientPreprocessor clientPreprocessor; + + // TODO: need to find a default for this? + @Autowired + private SpringClientFactory springClientFactory; - @Bean - @ConditionalOnMissingBean(RestTemplate.class) - public RestTemplate restTemplate(RibbonInterceptor ribbonInterceptor) { - RestTemplate restTemplate = new RestTemplate(); - List list = new ArrayList<>(); - list.add(ribbonInterceptor); - restTemplate.setInterceptors(list); - return restTemplate; - } + @Bean + @ConditionalOnMissingBean(RestTemplate.class) + public RestTemplate restTemplate(RibbonInterceptor ribbonInterceptor) { + RestTemplate restTemplate = new RestTemplate(); + List list = new ArrayList<>(); + list.add(ribbonInterceptor); + restTemplate.setInterceptors(list); + return restTemplate; + } - @Bean - @ConditionalOnMissingBean(LoadBalancerClient.class) - public LoadBalancerClient loadBalancerClient() { - return new RibbonLoadBalancerClient(balancers); - } + @Bean + @ConditionalOnMissingBean(LoadBalancerClient.class) + public LoadBalancerClient loadBalancerClient() { + return new RibbonLoadBalancerClient(clientPreprocessor, springClientFactory, balancers); + } - @Bean - public RibbonInterceptor ribbonInterceptor(LoadBalancerClient loadBalancerClient) { - return new RibbonInterceptor(loadBalancerClient); - } + @Bean + public RibbonInterceptor ribbonInterceptor(LoadBalancerClient loadBalancerClient) { + return new RibbonInterceptor(loadBalancerClient); + } - @Bean - public RibbonClientPreprocessor ribbonClientPreprocessor() { - return new RibbonClientPreprocessor() { - @Override - public void preprocess(String serviceId) { - //no-op - } - }; - } + @Configuration + protected static class DefaultRibbonClientPreprocessor { + + @Bean + public RibbonClientPreprocessor ribbonClientPreprocessor() { + return new RibbonClientPreprocessor() { + @Override + public void preprocess(String serviceId) { + // no-op + } + }; + } + + } } diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClient.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClient.java index d177c194..59b45171 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClient.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/ribbon/RibbonLoadBalancerClient.java @@ -4,15 +4,14 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import com.netflix.loadbalancer.AbstractLoadBalancer; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.loadbalancer.LoadBalancerClient; +import org.springframework.cloud.client.loadbalancer.LoadBalancerRequest; +import com.netflix.loadbalancer.AbstractLoadBalancer; import com.netflix.loadbalancer.BaseLoadBalancer; import com.netflix.loadbalancer.ILoadBalancer; import com.netflix.loadbalancer.Server; -import org.springframework.cloud.client.loadbalancer.LoadBalancerRequest; /** * @author Spencer Gibb @@ -20,15 +19,13 @@ import org.springframework.cloud.client.loadbalancer.LoadBalancerRequest; */ public class RibbonLoadBalancerClient implements LoadBalancerClient { - @Autowired private RibbonClientPreprocessor ribbonClientPreprocessor; - @Autowired private SpringClientFactory clientFactory; private Map balancers = new HashMap(); - public RibbonLoadBalancerClient(List balancers) { + public RibbonLoadBalancerClient(RibbonClientPreprocessor ribbonClientPreprocessor, SpringClientFactory clientFactory, List balancers) { for (BaseLoadBalancer balancer : balancers) { this.balancers.put(balancer.getName(), balancer); }