ConditionalOnClass

103 阅读1分钟

参考文章 blog.csdn.net/swordcenter…

只看FeignAutoConfiguration image.png

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));
}

image.png

排序后一个个处理 image.png

image.png

org.springframework.cloud.openfeign.FeignAutoConfiguration里的所有内部类

657f2d7deefb4d5895c2f92027fa3f1f_tplv-k3u1fbpfcp-watermark.png

先处理类本身 image.png

image.png

这里用反射判断是否存在,存在返回true,不存在返回false image.png

判断第一个内部类的,org.springframework.cloud.openfeign.FeignAutoConfiguration$HttpClient5FeignConfiguration image.png

@ConditionalOnClass(ApacheHttp5Client.class)

image.png

找出上一步中ConditionalOnClass的全包,feign.hc5.ApacheHttp5Client image.png

通过反正调用失败,返回false image.png

image.png