Feign注解源码

EnableFeignClients注解背后加载流程

  • @EnableFeignClients的@Import(FeignClientsRegistrar.class)实现注册
  • class FeignClientsRegistrar implements ImportBeanDefinitionRegistrar, ResourceLoaderAware, 
    EnvironmentAware
  • 注册类

      @Override
      public void registerBeanDefinitions(AnnotationMetadata metadata,
              BeanDefinitionRegistry registry) {
         //注册默认配置
          registerDefaultConfiguration(metadata, registry);
          registerFeignClients(metadata, registry);
      }

    1.1 registerDefaultConfiguration

          private void registerDefaultConfiguration(AnnotationMetadata metadata,
              BeanDefinitionRegistry registry) {
          //获取@EnableFeignClients注解中声明的变量值
          Map<String, Object> defaultAttrs = metadata
                  .getAnnotationAttributes(EnableFeignClients.class.getName(), true);
    
          if (defaultAttrs != null && defaultAttrs.containsKey("defaultConfiguration")) {
              String name;
            //该方法是否继承任何类
              if (metadata.hasEnclosingClass()) {
                  name = "default." + metadata.getEnclosingClassName();
              }
              else {
                //name = "default" + 包名 + 启动类
                  name = "default." + metadata.getClassName();
              }
             //构造上下文中需要用到的Bean信息并注册
              registerClientConfiguration(registry, name,
                      defaultAttrs.get("defaultConfiguration"));
          }
      }
          private void registerClientConfiguration(BeanDefinitionRegistry registry, Object name,
              Object configuration) {
                    //构造FeignClientSpecification类
          BeanDefinitionBuilder builder = BeanDefinitionBuilder
                  .genericBeanDefinition(FeignClientSpecification.class);
                  //把main函数类名传入
          builder.addConstructorArgValue(name);
                  //传入配置项
           builder.addConstructorArgValue(configuration);
                  //通过registerBeanDefinition注册Bean
          registry.registerBeanDefinition(
                  name + "." + FeignClientSpecification.class.getSimpleName(),
                  builder.getBeanDefinition());
      }

Spring中Bean加载模式的扩展点

Feign构造上下文对象(FeignContext)的过程

标签: none

已有 12 条评论

  1. 不错不错,我喜欢看 https://www.jiwenlaw.com/

  2. 看的我热血沸腾啊https://www.jiwenlaw.com/

  3. 看的我热血沸腾啊https://www.237fa.com/

  4. 想想你的文章写的特别好www.jiwenlaw.com

  5. 《他们生活的世界》韩国剧高清在线免费观看:https://www.jgz518.com/xingkong/37791.html

  6. 你的文章让我学到了很多技能,非常实用。 https://www.yonboz.com/video/32166.html

  7. 《玛雅蜜蜂历险记2:蜜糖游戏》动画片高清在线免费观看:https://www.jgz518.com/xingkong/5055.html

  8. 你的文章总是能给我带来欢乐,谢谢你! https://www.yonboz.com/video/28741.html

  9. 《玛雅蜜蜂历险记2:蜜糖游戏》动画片高清在线免费观看:https://www.jgz518.com/xingkong/5055.html

  10. 《天国的阶梯》韩国剧高清在线免费观看:https://www.jgz518.com/xingkong/104741.html

  11. 《张大千敦煌传奇》国产剧高清在线免费观看:https://www.jgz518.com/xingkong/27778.html

  12. ?诗歌散文评语?

添加新评论