2017-05-25 64 views
0

我具有自动装配丝带知道RestTemplate然后我添加interceptor-自动装配Autowired RibbonAware RestTemplate与拦截

@Component 
public class MyRestTemplate { 

    @Autowired 
    private RestTemplate restTemplate; 

    @PostConstruct 
    public void init(){ 
     restTemplate.setInterceptors(Collections.singletonList(new 
     MyRestTemplateRequestInterceptor(applicationName))); 
    } 
} 

如果我在其他一些组件@AutoWire RestTemplate,将我与RestTemplate的相同实例的包装这个俘虏?我的观察是其他组件中的自动装配resttemplate也增加了这个拦截器。请帮助验证理解。

回答

0

你会得到RestTemplate的同一个实例。当Bean MyRestTemplate是构造函数(而不是构造函数)时,您将添加MyRestTemplateRequestInterceptor到拦截器。 所以这个拦截器将被应用于RestTemplate。 如果你正在寻找应用拦截特定客户假死,你可以创建自己的配置:

@Configuration 
@IgnoreDuringScan 
public class FeignClientConfiguration { 

    @Autowired 
    private Environment environment; 

    @Bean 
    public Encoder feignEncoder() { 
     return new GsonEncoder(); 
    } 


    @Bean 
    public ErrorDecoder feignDecoder() { 
     return new GsonDecoder(); 
    } 

    @Bean 
    public RequestInterceptor requestHeaderInterceptor() { 
     return new RequestInterceptor() { 
      @Override 
      public void apply(RequestTemplate requestTemplate) { 
       //impl 
      } 
     }; 
    } 

    @Bean 
    public Feign.Builder feingBuilder() { 
     return Feign.builder().encoder(feignEncoder()).decoder(feignDecoder()).errorDecoder(new YourErrorDecoder()) 
      .requestInterceptor(requestHeaderInterceptor); 
    } 

} 

然后,只需配置适用于您的假死客户:

@FeignClient(name = "myFeign", url = "url/...", configuration = { 
FeignClientConfiguration.class 
}) 
public interface YourFeignClient { 
    //.... 
} 
相关问题