Digester 1 1 原始碼閱讀

2021-08-30 11:48:00 字數 1384 閱讀 1242

[size=medium]

前一段時間我們閱讀了digester的最初始的版本1.0版,現在我們再看一下1.1版,看看變化

來領悟作者的重構思路。

首先我們來看一下這個版本的更新:

[/size]

[size=medium]

1. 增加了乙個rules介面,原來是放到digester裡面的

用乙個hashmap>的來儲存所有的rule的,所有的add,removey以及

lookup操作都是在digester裡面進行的,現在把這個抽取出來,感覺非常合理,digester只是

依賴於rues,而相關的操作都是在rules裡面進行的;

[/size]

[size=medium]

2. objectcreationfactory, abstractobjectcreationfactory, factorycreaterule類,這個

其實也很好理解,主要是支援了通過傳遞乙個objectcreationfactory,通過factorycreaterule來

建立乙個object,這樣就可以使用使用者的工廠來建立物件了。

[/size]

[size=medium]

3. 剛才我們談到了,這個地方增加了乙個新的介面rules,它也增加了乙個基本的實現rulesbase類,這個裡面其實就是使用了乙個hashmap>的資料結構,不過它裡面有乙個cache,乙個rules,在加入的時候時候cache和rules同時寫的,然後

內部使用的是cache來實現增刪改查,對外在呼叫getrules的時候,返回的時候rules。

[/size]

[size=medium]

4. 裡面還增加了乙個extendedbaserules,不過在這個版本沒有使用,

就是增加了更多的匹配的選項,支援萬用字元等,這個還沒有仔細看,不過

應該變化不大。

[/size]

[size=medium]

5. 變化還有digester,它也相應的做出了一些調整,最大的變化應該時候

增加了乙個arraystack paramstack,這樣在callmethodrule和callparamrule的

時候就不會再把引數壓到盛放object的那個stack裡面了。

[/size]

[size=medium]

6. 還有乙個比較大的變化點就是增加了乙個ruleset和乙個它的標準實現

rulesetbase,它允許使用者根據namespaceuri來定義一組rule,在digester的

addruleset方法裡面會呼叫ruleset的addruleinstances,實際上在它的實現

裡面時候將一些rule增加到rulesbase裡面。

[/size]

[img]

《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具

檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...

Soul 原始碼閱讀11 Zookeeper同步資料

基於 zookeeper 的同步原理很簡單,主要是依賴zookeeper的 watch 機制,soul web會監聽配置的節點,soul admin在啟動的時候,會將資料全量寫入zookeeper,後續資料發生變更時,會增量更新zookeeper的節點,與此同時,soul web會監聽配置資訊的節點...

原始碼閱讀 Glide原始碼閱讀之with方法(一)

前言 本篇基於4.8.0版本 原始碼閱讀 glide原始碼閱讀之with方法 一 原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 大多數情況下,我們使用glide 就一句 但是這一句 裡面蘊含著成噸的 with方法有以下幾個過載方法 publi...