Feign的底层原理

本文介绍了Feign的底层实现机制,从@EnableFeignClients注解的启用,到根据@FeignClient接口生成代理类,再到RequestTemplate的创建,最后详细阐述了如何利用HttpClient或OkHttp等发送实际请求的过程。
摘要由CSDN通过智能技术生成

1 @EnableFeignClients

这个注解标注在springboot的启动类上,作用是开启feign接口扫描
在这里插入图片描述FeignClientsRegistrar.registerFeignClients()扫描被@FeignClient标识的接口生成代理类

    public void registerFeignClients(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
   
        LinkedHashSet<BeanDefinition> candidateComponents = new LinkedHashSet();
        Map<String, Object> attrs = metadata.getAnnotationAttributes(EnableFeignClients.class.getName());
        new AnnotationTypeFilter(FeignClient.class);
        Class<?>[] clients = attrs == null ? null 
回答: Feign底层原理是基于JDK的动态代理实现的。无论是否需要负载均衡,都会通过targeter.target()方法创建动态代理对象。具体的调用栈是:Targeter.target()→DefaultTargeter.target()→Feign.Builder.target()→Feign.newInstance()→ReflectiveFeign.newInstance()。在newInstance方法中,会创建configKey→SynchronousMethodHandler的映射,用于处理用户定义的FeignClient接口中的方法。如果是接口中的default方法,则会创建DefaultMethodHandler并添加进defaultMethodHandlers列表和methodToHandler映射中。最终,创建InvocationHandler核心代理对象,代理逻辑都封装在该对象中。在代理过程中,会根据方法名称dispatch到对应的MethodHandler进行处理。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *3* [Feign底层原理分析-自动装载&动态代理](https://blog.csdn.net/Mr_Xu12308/article/details/124901407)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【第四章】详解Feign的实现原理](https://blog.csdn.net/weixin_42039228/article/details/123714356)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值