前言
优秀的设计总是少不了丰富的扩展点, 比如spring可以自动装配, aop扩展, web模块也有拦截器, 甚至对servlet的过滤器都有封装; 再比如netty、doubbo等等都支持在数据流入流出都允许用户自定义扩展点实现定制化处理, 咱们的feign框架也同样如此, 在可以定制化组件的同时, 也允许我们对发起请求之前和接受请求之后根据扩展点实现个性化的处理。
前景回顾
- 在
SynchronousMethodHandler#invoke
方法中, 会先用参数填充模板得到有完整请求数据的载体RequestTemplate
, 然后执行请求拦截器, 拦截器执行完成之后, 再讲目标请求地址设置给RequestTemplate
, 最后构建客户端参数Request
- 在请求完成之后会在
ResponseHandler#handleResponse
方法中执行相应责任链, 该责任链的每一个节点在feign框架中都可以看作是一个响应拦截器
拦截器应用
请求拦截器
public interface