feign基础源码解析(初始化,调用过程)

实例调用过程
feign的核心主要分两块:
1,初始化
feign通过Feign.builder() 构造器构建传递初始化参数,如:发起http的工具,序列化工具,目标类,生产者地址等参数
然后解析目标类注解为每个方法生成对应的MethodHandler ,
然后使用jdk动态代理为目标类生成代理实例ReflectiveFeign.FeignInvocationHandler
2,调用过程
调用目标类实例方法实际调用的是代理对象 ReflectiveFeign.FeignInvocationHandler.invoke–>
同步调用方法处理器 SynchronousMethodHandler.invoke–> ApacheHttp装饰者 ApacheHttpClient.execute

测试接口
public interface TestFeignClient {
    @GET
    @Path("test")
    String test(String str);

}
1,初始化过程,脱离spring自动装配的情况下,使用TestFeignClient,创建目标类接口的代理类实例
    TestFeignClient target = Feign.builder()
            .client(new ApacheHttpClient())
            .contract(new JAXRS2Contract())
            .decoder(new JacksonDecoder())
            .encoder(new JacksonEncoder())
            .target(TestFeignClient.class, "http://" + testClient);
            
    Feign.builder() 基础构建器
    
    .client(new ApacheHttpClient()) 选择具体发起http请求的工具
        由ApacheHttpClient 类实现 实现feign.Client 接口,
        核心实现方法execute(),通过解析转换feign.Request 为 org.apache.http.HttpResponse
        然后通过apache.HttpClient 发起请求
        
    .contract(new JAXRS2Contract()) 使用 JAX-RS 2 注解标识请求
    
    .decoder(new JacksonDecoder())  解码器
    .encoder(new JacksonEncoder())  编码器
    
    .target(TestFeignClient.class, "http://" + testClient); 使用jdk动态代理生成代理对象
        基础构建之后创建默认对象 ReflectiveFeign
        1,new ReflectiveFeign(handlersByName, invocationHandlerFactory, queryMapEncoder);
        2,调用 ReflectiveFeign.newInstance(targ
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值