SpringCloud复习:(5) feign的底层原理

首先需要在启动类加注解@EnableFeignClients,它的代码如下:
SpringCloud复习:(5) feign的底层原理_第1张图片
可以看到,@EnableFeignClients导入了FeignClientRegistra类,它实现了ImportBeanDefinitionRegistrar,其中定义了注册bean的逻辑SpringCloud复习:(5) feign的底层原理_第2张图片
其中registerFeignClients用于注册我们通过@FeignClient注解标记的接口,这个方法代码如下:
SpringCloud复习:(5) feign的底层原理_第3张图片
SpringCloud复习:(5) feign的底层原理_第4张图片
这个方法中会查找带@FeignClient注解的类,然后调用registerFeignClient方法来注册bean,registerFeignClient代码如下:
SpringCloud复习:(5) feign的底层原理_第5张图片
SpringCloud复习:(5) feign的底层原理_第6张图片
SpringCloud复习:(5) feign的底层原理_第7张图片
其中注册的时候使用了FeignClientFactoryBean的信息来创建BeanDefinition.这个工厂bean的getObject方法如下:
SpringCloud复习:(5) feign的底层原理_第8张图片
其中调用的getTarget方法代码如下:
SpringCloud复习:(5) feign的底层原理_第9张图片
SpringCloud复习:(5) feign的底层原理_第10张图片
SpringCloud复习:(5) feign的底层原理_第11张图片
其中调用了target方法,target方法代码如下:
SpringCloud复习:(5) feign的底层原理_第12张图片
其中调用的target方法的代码如下:
在这里插入图片描述
其中调用的newInstance的代码如下:
SpringCloud复习:(5) feign的底层原理_第13张图片
从上图可以看到,FeignClientFactoryBean真正返回的是一个jdk动态代理对象,它的InvocationHandler类(FeignInvocationHandler)的invoke代码如下:
SpringCloud复习:(5) feign的底层原理_第14张图片

你可能感兴趣的:(SpringCloud,spring,cloud,spring,后端)