参考文章 blog.csdn.net/swordcenter…
只看FeignAutoConfiguration
asSourceClass
SourceClass asSourceClass(@Nullable String className, Predicate<String> filter) throws IOException {
if (className == null || filter.test(className)) {
return this.objectSourceClass;
}
if (className.startsWith("java")) {
// Never use ASM for core java types
try {
return new SourceClass(ClassUtils.forName(className, this.resourceLoader.getClassLoader()));
}
catch (ClassNotFoundException ex) {
throw new NestedIOException("Failed to load class [" + className + "]", ex);
}
}
return new SourceClass(this.metadataReaderFactory.getMetadataReader(className));
}
排序后一个个处理
org.springframework.cloud.openfeign.FeignAutoConfiguration里的所有内部类
先处理类本身
这里用反射判断是否存在,存在返回true,不存在返回false
判断第一个内部类的,org.springframework.cloud.openfeign.FeignAutoConfiguration$HttpClient5FeignConfiguration
@ConditionalOnClass(ApacheHttp5Client.class)
找出上一步中ConditionalOnClass的全包,feign.hc5.ApacheHttp5Client
通过反正调用失败,返回false