程序員wwwhj8828net如何在I8669I44445工作中自我增值Java數據處理的常用技術

背景
在實際開發中,數據的處理有五種:獲取、傳輸、存儲、分析、轉換。每種各對應一些常用的技術。

序列化和反序列化
序列化是將對象的信息轉換爲可傳輸或可存儲形式的過程。反序列化就是反過來讓這些可傳輸的、可存儲的信息變回對象。

傳輸的序列化除了安全性的考慮,因爲涉及到和第三方通信,所以還有重要的一點是可讀性和不變性。而存儲的鏈路短,可控,所以更講究效率。

傳輸最常用的序列化手段是JSON這樣人眼可讀的。而存儲會使用protostuff這種將key值映射成編碼來傳輸的。因爲1,2,3比one、two、four更省空間更高效。但是傳輸中都用編碼,解析時就很難判斷它的意義。雙方還要進行額外的約定。本來3代表four,中間加了一個three,3代表three的話,對方沒有及時被通知,那麼解析傳輸過來的消息就是錯的。

反射
Java反射是在運行時,對於任何一個類,都可以知道這個類有哪些方法和屬性。對於任何一個對象,都能對它的方法和屬性進行調用。

常用數據轉換工具,比如Spring的RequestParam、RequestBody、ResponseBody內部就用了反射機制。還有Jackson等工具類。甚至在業務代碼中直接使用反射也是很常見的。比如設計一個AI助手問答機。想實現:

小A:我要搜索美女"冰冰"AI助手:OK,搜索"冰冰"小A:想知道她的"年齡"AI助手:21歲

上面這個JAVA實現是這樣的:

Field field = 美女.class.getDeclaredField(年齡);field.setAccessible(true);return field.get(冰冰).toString();
動態代理
代理模式是爲了提供增強的或不同的操作,而插入來替代實際對象的對象。這些操作涉及到與實際對象的通信,所以稱爲代理。

Spring主要的兩大思想IoC和AOP。對於IoC,利用的是反射機制。而AOP使用了動態代理,當然底層也是反射。

JDK動態代理只能給有接口的類代理。本質是通過反射獲取要執行的方法,並在執行前或者後加入一些代理處理操作。cglib本質上用繼承的方法實現的,是通過動態生成一個子類去覆蓋所要代理的類。用final修飾的不能被覆蓋的就不代理了。spring動態代理是優先使用JDK動態代理,如果目標沒有實現任何接口,則創建一個cglib代理。如果幾個類實現了都實現了一個通用接口,比如Runnable,並且加了Component請spring來負責其生命週期。這時候會拋出一個Proxy代理異常。說期望加載一個Bean,實際上實現卻不只一個。這時候可以在這個類上加下面標籤強制使用cglib代理來解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章