使用 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案例。 對於jsp轉譯,如果會導致jsp失敗,那是可以接受的。
快取 caching
為改善效能,實施可自由快取從傳回的物件 obj.adaptTo()
呼叫。 如果 obj
相同,則傳回的物件相同。
系統會針對所有使用者執行此快取 AdapterFactory
根據個案。
但是,沒有一般規則 — 物件可能是新例項或現有例項。 這表示您無法依賴任一行為。 因此,這很重要,尤其是在內部 AdapterFactory
,表示此情境中可重複使用物件。
運作方式 how-it-works
有多種方式可以 Adaptable.adaptTo()
可以實作:
-
物件本身;實作方法本身並對應至特定物件。
-
按
AdapterFactory
,可對應任意物件。物件仍必須實作
Adaptable
介面且必須擴充SlingAdaptable
(會傳遞adaptTo
呼叫中央介面卡管理員)。這可讓連結至
adaptTo
現有類別的機制,例如Resource
. -
兩者的組合。
對於第一種情況,Java™檔案可以說明 adaptTo-targets
是可能的。 然而,對於特定子類別(例如JCR型資源),通常無法執行此操作。 在後一種情況下,實施 AdapterFactory
通常是套件私用類別的一部分,因此不會顯示在使用者端API中,也不會列在Java™檔案中。 理論上來說,您可以存取 AdapterFactory
來自的實作 osgi 服務執行階段並檢視其「可調整性」(來源和目標)設定,但不會相互對應。 最後,這取決於內部邏輯,這必須記錄在案。 因此,請參閱此參考檔案。
參考 reference
Sling sling
資源 可調整為:
ResourceResolver 可調整為:
SlingHttpServletRequest 可調整為:
尚未有目標,但實作可調整的,而且可以在自訂AdapterFactory中作為來源使用。
SlingHttpServletResponse 可調整為:
WCM wcm
頁面 可調整為:
元件 可調整為:
範本 可調整為:
安全性 security
可授權, 使用者和 群組** 適應:
DAM dam
資產 可調整為:
標記 tagging
標籤 可調整為:
其他 other
此外,Sling / JCR / OCM也提供 [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory)
自訂OCM (物件內容對應)物件。