使用 Sling 介面卡 using-sling-adapters
Sling提供介面卡模式,以方便翻譯實作介面介面的物件。 此介面提供泛型adaptTo()方法,將物件轉譯成作為引數傳遞的類別型別。
例如,若要將Resource物件轉譯為對應的Node物件,您只需執行下列動作即可:
Node node = resource.adaptTo(Node.class);
使用案例 use-cases
有以下使用案例:
-
取得實作特定的物件。
-
需要傳遞內部前後關聯物件的物件的快速鍵建立。
例如,以JCR為基礎的
ResourceResolver
保留對請求的JCR Session
的參考,而許多根據該請求工作階段工作的物件需要該參考,例如PageManager
或UserManager
。 -
服務的捷徑。
罕見的情況 —
sling.getService()
也相當簡單。
空值傳回值 null-return-value
adaptTo()
可傳回null。
null傳回有多種原因,包括:
- 實作不支援目標型別
- 處理此情況的介面卡工廠未啟用(例如,因為遺失服務參考)
- 內部條件失敗
- 服務無法使用
請務必謹慎處理Null案例。 對於jsp呈現,如果jsp失敗導致內容空白,這是可以接受的。
快取 caching
若要改善效能,實作可自由快取obj.adaptTo()
呼叫傳回的物件。 如果obj
相同,則傳回的物件也相同。
已針對所有AdapterFactory
個案例執行此快取。
但是,沒有一般規則 — 物件可能是新例項或現有例項。 因此,這表示您無法信賴任一行為。 因此,物件在此情境中可重複使用很重要,尤其是在AdapterFactory
內。
運作方式 how-it-works
有多種方式可以實作Adaptable.adaptTo()
:
-
物件本身;實作方法本身並對應至特定物件。
-
AdapterFactory
可以對應任意物件。物件仍必須實作
Adaptable
介面且必須延伸SlingAdaptable
(這會將adaptTo
呼叫傳遞給中央介面卡管理員)。此方法允許連結到現有類別(例如
Resource
)的adaptTo
機制。 -
兩者的組合。
對於第一種情況,Java™檔案可以說明哪些adaptTo-targets
是可能的。 不過,對於特定子類別(例如JCR型資源),此陳述式通常無法執行。 在後一種情況下,AdapterFactory
的實施通常是套件組合私用類別的一部分,因此不會在使用者端API中公開,也不會列在Java™檔案中。 理論上來說,可以從OSGi服務執行階段存取所有AdapterFactory
實作,並檢視其「可適配」(來源和目標)組態,但無法相互對應。 最後,這取決於內部邏輯,而這必須記錄在案。 因此,請參閱此參考檔案。
參考 reference
Sling sling
資源 已調整為:
ResourceResolver 適配:
SlingHttpServletRequest 已調整為:
尚未有目標,但實作可調整的,而且可以在自訂AdapterFactory中作為來源使用。
SlingHttpServletResponse 已調整為:
WCM wcm
頁面 已調整為:
元件 已調整:
範本 適配:
安全性 security
可授權、使用者 和 群組 適配:
DAM dam
資產 已調整為:
標記 tagging
標籤 已調整為:
其他 other
此外,Sling / JCR / OCM也為自訂OCM (物件內容對應)物件提供AdapterFactory
。