-
Retrofit是如何解析注解以及裝配參數的呢?
serviceMethodCached是線程安全的。它用于緩存我們創建的ServiceMethod實例,由于我們需要頻繁的去請求定義的接口中的方法,當有ServiceMethod實例的緩存時,就不需要頻繁創建了。
下圖的Builder將
上圖中的paresHttpMethodAndPath方法的注解進行解析,是否有HttpMethod:即Get或者POST。是否有body,是否有@Query注解的參數,請求路徑中是否有參數等等,有就會進行解析。下圖的parseParameter方法便開始對請求方法中的參數進行解析。
查看全部 -
Retrofit通過我們調用create方法時傳遞的接口,通過Java內置的動態代理對象Proxy的newProxyInstance方法,為我們動態生成Proxy代理類實例,該實例是Proxy類型實例,Java的動態代理只能為接口創建代理類,不能為抽象類或其他類生成代理類,否則會報錯。
Java8中interface也能定義deafault方法。
Retrofit.create()就是通過Java的動態代理將我們自定義實現的請求Interface的方法先轉給了InvocationHandler的invoke(),再轉嫁給loadServiceMethod實例的invoke(),該invoke方法生成了一個okhttpCall實例。
查看全部 -
Gson對象實例化流程
查看全部 -
動態代理JDK原生實現與cglib實現的對比
查看全部 -
記一個能記筆記的筆記哦
查看全部 -
查看全部
-
學習到了很多:
1. 閱讀源碼的方式
① 站在使用者的角度,從使用到的代碼,一步步深入,直到具體的實現,如Retrofit.create(),返回得到接口的實體是動態代理得到的;如IApiService的每個方法調用,返回得到Call/Observable,通過解析方法上的注解,得到HttpServiceMethod$CallAdapted,將OkHttpCall轉換得到相應的類型,如Call,調用Call.execute(),內部調用OkHttpCall.execute(),通過OkHttpClient執行真正的網絡請求;又如CallAdapter是如何將Call轉換成需要的類型的。
② 再找一些我們熟悉的知識點進一步了解原理,如解析注解的過程,如OkHttpCall的內部實現方式,如反序列化的實現。
③ 總結其中使用到的設計模式,查看已經熟悉的設計模式,進一步了解原理,查看不熟悉的設計模式,了解庫的實現者是如何利用這種設計模式的。總的來說,還是以我們熟悉的方式去查看源碼。
④ 根據需求,可以總結庫的優劣勢,需要學習到的點,可能會在日常開發中使用到的點,甚至是對庫的建議。
2. 某些知識點的了解
① 注解的使用場景。在Retrofit中,注解主要用于業務邏輯的處理。另外還有在Room/Dagger中,注解用于在編譯期生成代碼,在編譯器生成字節碼。
② kotlin的原理,編譯時修改函數簽名,在函數中參數列表末尾添加一個Continutation參數(實際上是一個回調接口)。
③ Gson的實現原理。使用構造器/Unsafe,創建實體或分配實體需要的內存空間,讀取json數據,解析類上的注解。
④ 反射、泛型的淺層了解。
另外還有未完全掌握的知識點:
泛型的深入理解,如wildcard,類型擦除所帶來的問題與解決方案,特別是運行時。理解signature
Unsafe的使用與原理
反射的深入了解
查看全部 -
guf查看全部
-
用反射的方式修改反射本身
查看全部 -
類中聲明一個屬性:private?static?final?int?a =1,這個?a?可以通過反射修改嗎?
不能,運行時會拋出 IllegalAccessException?異常
查看全部 -
對象中聲明一個屬性:private?final?int?a =1,這個?a?可以通過反射修改嗎?
不能,源碼編譯時會將?a?編譯為一個編譯期常量,把這個字段被使用的地方都替換為直接的字面量
查看全部 -
如何動態修改?Retrofit?的?BaseUrl?
*?持有?HttpUrl?的引用
*?通過反射修改?HttpUrl?中的?Schema、Host、Port?等內部字段的值
查看全部 -
自定義一下maven倉庫
查看全部 -
0.0啊呀呀
查看全部 -
代理的其他實現方案:Cglib
eg. Spring中使用的就是Cglib
查看全部 -
接口的實現類是從哪里來的?
create方法中通過java內置的動態代理實現的。將接口中的所有方法轉給了InvocationHandler的invoke方法,并返回一個loadServiceMethod(是一個ServiceMethod)方法。由它發起網絡請求。
查看全部 -
Gson反序列化過程
查看全部 -
了解Retrofit的內部實現原理
查看全部 -
5-4 代理模式
查看全部 -
適配器模式
查看全部 -
Builder模式
查看全部 -
抽象工廠模式
查看全部 -
Gson對象實例化流程
查看全部 -
靜態代理3
查看全部 -
動態代理JDK原生實現與cglib實現的對比
查看全部
舉報