Retrofit源码解析-动态代理

本文详细解析了Retrofit的动态代理实现机制,包括静态代理和动态代理的区别,重点探讨了动态代理的工作原理,如代理类的生成、调用过程。通过分析,展示了动态代理在提高代码复用性和灵活性上的优势,同时也提到了其效率方面的不足。
摘要由CSDN通过智能技术生成

Retrofit源码解析-动态代理

背景

之前一系列的关于Retrofit使用和封装的讲解过后,想必对Retrofit的灵活性和扩展性有何深入的了解,既然如此我们就对于Retrofit内部实现原理来深入的学习,既然要用就要理解怎么用和怎么能用的的更好,不能局限在使用的层面上,接下来的文章从源码的角度去思考和借鉴如何才能写出一个好的开源框架。

RxRetrofit封装-专栏

原理

Retrofit 2.0是如何进行网络请求的呢?主要是用到了Java的动态代理,所以在深入学习之前,先来了解下Java的动态代理

何为Java动态代理

其实Java动态代理就是设计模式中的代理模式,特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。

通俗来说:比如登录之前需要判断用户信息是否完整、请求之前需要配置请求数据等等,动态代理就是来处理这样的需求,让用户只需要关心事件处理

按照代理的创建时期,代理类可以分为两种。

  • 静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。

  • 动态代理:在程序运行时,运用反射机制动态创建而成。

静态代理

静态代理其实就是按照代理模式,在实现了代理类和委托类之后的调用方式,可以把它看成是代理模式的写法

接口类
/**
 * 接口
 * Created by WZG on 2017/1/19.
 */

public interface HttpRequest {
   

    /**
     * 请求
     */
    void request();
}
委托类
/**
 * 委托类
 * Created by WZG on 2017/1/19.
 */

public class HttpRequestImpl implements HttpRequest {
   
    @Override
    public void request() {
        Log.e("tag","-------->htt请求");
    }
}
代理类
/**
 * 代理类-静态
 * Created by WZG on 2017/1/19.
 */

public class HttpRequestProxy implements HttpRequest {
   

    HttpRequestImpl httpRequest;


    public HttpRequestProxy(HttpRequestImpl httpRequest) {
        this.httpRequest = 
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值