当HystrixFeign类存在时,FeignAutoConfiguration定义的HystrixTargeter作为Targeter存在。同时FeignClientsConfiguration定义的HystrixFeign.builder作为Feign.Builder。
# spring-cloud-netflix-1.3.6.RELEASE.jar!/org.springframework.cloud.netflix.feign.HystrixTargeter
@Override
public <T> T target(FeignClientFactoryBean factory, Feign.Builder feign, FeignContext context,
Target.HardCodedTarget<T> target) {
if (!(feign instanceof feign.hystrix.HystrixFeign.Builder)) {
return feign.target(target);
}
feign.hystrix.HystrixFeign.Builder builder = (feign.hystrix.HystrixFeign.Builder) feign;
SetterFactory setterFactory = getOptional(factory.getName(), context,
SetterFactory.class);
if (setterFactory != null) { // 1. 默认SetterFactory未定义
builder.setterFactory(setterFactory);
}
Class<?> fallback = factory.getFallback();
if (fallback != void.class) { // 2. 默认@FeignClient的fallback属性为void.class
return targetWithFallback(factory.getName(), context, target, builder, fallback);
}
Class<?> fallbackFactory = factory.getFallbackFactory();
if (fallbackFactory != void.class) { // 3. 默认@FeignClient的fallbackFactory属性为void.class
return targetWithFallbackFactory(factory.getName(), context, target, builder, fallbackFactory);
}
return feign.target(target); // 4. 如果未设置fallback和fallbackFactory,与普通feign无区别
}