zoukankan      html  css  js  c++  java
  • springcloud Feign实现原理

    一、Feign OpenFeign spring-cloud-feign 三者的区别

    feign 是netflix 开源的组件 后不在维护,交由社区维护,所以更改名称为openfeign

    springcloud 对openfeign 做了增强,集成了springmvc 的注解,方便springboot开发的一个组件

    二、openfeign 解决的主要问题

    开发人员的开发效率问题,使得我们调用一个接口就像调用本地方法一样,省去了http连接和数据解析处理的步骤

    三、openfeign 的核心原理

    java 原生支持的基于接口的方式实现动态代理

    四、openfeign的实现步骤

    1.在spring启动的过程中,会检查被@FeignClient 注解标记的接口,然后将其注入到spring容器中,这里以DemoService接口为例

    2.在spring getBean的实现逻辑中,spring会尝试获取DemoService的实现类,由于我们没有实现类,Feign 框架就会扩展spring的getbean的处理逻辑,就会为DemoService 生成一个动态接口代理对象,并把这个对象注入到spring容器中

    3.当调用接口时,对于DemoService的调用统一转发到代理类的invocationhandler中,将hostname 转为http的格式请求,并把数据解析为接口返回格式返回

    五、第四步可以简单理解为

    1.我们定义的DemoService ,由于添加了@FeignClient这个注解,就会生成一个虚假的该接口的动态代理实现类

    2.使用这个接口的地方,最终拿到的都是一个虚假的DemoServiceProxy 代理类对象

    3.所有发生在DemoServiceProxy 上的调用,都会转发给Feign 框架,将请求转为http发送出去,并解析结构返回

    六、总结

    1.通过@EnableFeignClients 触发spring 应用程序对classpass 中的加了@FeignClient修饰类的扫描

    2.解析到@FeignClient修饰的类后,Feign 框架会扩展springbean Definition bean的注册逻辑,最终注册一个FeignClientFactoryBean 到容器

    3.spring容器在初始化其他用到@FeignClient修饰的类时,获得的是一个FeignClentFactoryBean 生成的一个代理proxy

    4.基于java 原生动态代理机制,针对proxy的调用都会转发给Feign框架定义的一个invocationHandler,由该handler 完成后续的http转换,发送、接受、翻译http响应工作

    原文借鉴:https://www.cnblogs.com/651434092qq/p/14260784.html

  • 相关阅读:
    JavaScript + HTML 虚拟键盘效果
    HTML + JS随机抽号。
    JavaScript 鼠标划过 播放音乐。
    JavaScript 笔记
    HTML5 div+css导航菜单
    div错位/解决IE6、IE7、IE8样式不兼容问题
    HTML5-表单的创建
    HTML5-布局的使用
    HTML5-块元素标签的使用
    HTML5-列表的使用
  • 原文地址:https://www.cnblogs.com/lufei33180/p/14493935.html
Copyright © 2011-2022 走看看