请问谁知道FeignClient注解spring是怎么解析的?

在feign没有整合springcloud的时候,通过client调用服务端,可以自定义编码器,解码器,日志,拦截器等
自定义好后,还需要手动new,并设置到对应的FeignService中
如:
    IService service = Feign.builder()
        .encoder(new GsonEncoder())
        .decoder(new GsonDecoder())
        .errorDecoder(new ServiceErrorDecoder(new GsonDecoder()))
        .logger(new Logger.ErrorLogger())
        .logLevel(Logger.Level.BASIC)
        .requestInterceptor(new ForwardedForInterceptor())
        .requestInterceptor(new BasicAuthRequestInterceptor("baiqirui", "123456"))
        .target(IService.class, "http://localhost:2226");
 
在整合springcloud的时候,只需要在Service上加上@FeignClient, 就可以了, 而且在自定义“拦截器”,“解码器”等, 只需要把它注册成一个bean之后,spring就能自动识别添加这个“拦截器”,不需要我们在做其他操作, 求问为什么,到底做了些什么操作,在哪做的?
 
 
已邀请:

zxddeveloper

赞同来自: baiqirui JThink

可以读一下org.springframework.cloud.netflix.feign.FeignClientFactoryBean这个FactoryBean,每个被@FeignClient注解的接扣通过FeignClientFactoryBean#getObject()获取bean

itmuch.com - 《Spring Cloud与Docker微服务架构实战》作者

赞同来自: baiqirui

如果对初始化的机制感兴趣,可以从以下代码开始阅读:org.springframework.cloud.netflix.feign.FeignClientsRegistrar#registerFeignClients
打个断点,Debug一下就知道了。还是比较简单的。
 

hys

赞同来自:

我想知道 spring 如何获取 @FeignClient 的参数值 。例如:在 rest 中调用 FeignClient 此时解析 他调用的name 值

baiqirui - 码农一枚

赞同来自:

首先在FeignClientsRegistrar#registerFeignClients方法中扫描@FeignClient注解,并将name属性+“FeignClient" 字符串作为 该 FeignClient bean的名称进行注册

1.png

 
 
然后在FeignClientFactoryBean#getObject()获取bean的时候组装 需要 调用“微服务”的url,

2.png

 
 
 

要回复问题请先登录注册