RefectiveFeign
RefectiveFeign
RefectiveFeign 是 Feign 的具体实现类,它可以生成动态代理对象
动态代理对象的创建
RefectiveFeign 的 newInstance()方法创建 RPC 动态代理的实例
RefectiveFeign 的 newInstance 方法:
解析远程接口的方法,每个方法创建一个 MethodHandler 方法处理器,nameToHandler 的 key 是方法名,value 是方法对应的 MethodHandler
创建 methodToHandler,key 是 method,value 是方法对应的 MethodHandler
创建调用处理器 InvocationHandler
通过调用 Proxy.newProxyInstance()创建一个动态代理实例
方法解析器的创建
方法解析器的创建通过 SynchronousMethodHandler 的 create 方法完成的,在此之前需要通过 Contract 调用 parseAndValidatateMetadata 方法返回方法元数据列表,默认 Contract 是用的 Spring MVC 的 SpringMvcContract
调用处理器的创建
调用处理器的创建是通过 InvocationHandlerFactory 的 create 方法,默认类是通过 Default 的 create 方法创建,也就是创建 FeignInvocationHandler 的实例。
总结
这篇文章主要对 RefectiveFeign 的 newInstance()方法进行分析,newInstance()方法主要是创建 RPC 动态代理的实例,过程是先进行方法解析,针对每一个方法创建对应的方法处理器,然后创建调用处理器 InvocationHandler,用到的类是默认是 FeignInvocationHandler,然后通过 java 的 JDK 的 Proxy.newProxyInstance 方法来创建出一个动态的代理对象。协议解析类 Contract 调用的是 springMVC 的 SpringMvcContract 协议规则解析类,使用 SpringMvcContract 协议规则解析类对于开发人员来说不需要重新进行学习,降低了开发成本和维护程度,远程调用 RPC 的方法注解和服务端提供的方法注解保持一致。虽然 feign 有自己的默认协议规则,但是没有使用。
版权声明: 本文为 InfoQ 作者【周杰伦本人】的原创文章。
原文链接:【http://xie.infoq.cn/article/eea849bdb906093d962a7d34c】。文章转载请联系作者。
评论