希望写的每一篇博客都能帮助到各位同学,我也会坚持不定期的记录我的点滴理解;
欢迎关注公众号:杜甫之心
对于熟悉spring源代码的同学,应该是很容易就懂的,无非就是如何将feign用到的类装入ioc容器中,以及如何生成代理类,最后如何调用;
涉及到的技术:
- ioc容器
- aop,jdk动态代理
- http请求
分为两部分:
1、加载配置生成代理类;
代理类的产生是在依赖注入的时候;具体为populateBean方法;
将代理类生成后设置到引用的类中;
1.1、生成代理类:jdk动态代理
ReflectiveFeign.newInstance();
①获取接口中的方法处理器:
每一个方法都会生成一个MethodHandler,具体的实现类为SynchronousMethodHandler;
ReflectiveFeign.apply;
容器为:Map<String, MethodHandler> nameToHandler;
②将method和methodHandler对应放在Map中;
Map<Method, MethodHandler> methodToHandler;
MethodHandler是从1.2中的nameToHandler;
③创建InvocationHandler:使用jdk动态代理一定要有这个;
包含target对象以及Map<Method, MethodHandler> dispatch;
④创建动态代理类
Proxy.newInstance(classLoader, 接口,InvocationHandler);
2、调用部分;
在调用的时候,如果当前是个代理类,会直接回调InvocationHandler,具体的实现类为FeignInvocationHandler,