使用 Sling 介面卡 using-sling-adapters
Sling 選件 適配器模式 方便地轉換實現 適應性 介面。 此介面提供一般 adaptTo() 將物件轉譯為要作為引數傳遞的類別類型的方法。
例如,要將資源對象轉換為相應的Node對象,您只需執行以下操作:
Node node = resource.adaptTo(Node.class);
使用案例 use-cases
有下列使用案例:
-
取得實作專屬物件。
-
需要傳遞內部上下文對象的對象的快捷方式建立。
例如,以JCR為基礎
ResourceResolver
保有對請求的引用JCR Session
,而許多物件則需要此工作階段,例如PageManager
或UserManager
. -
服務的捷徑。
罕見的案例。
sling.getService()
也很簡單。
Null返回值 null-return-value
adaptTo()
可返回null。
原因多種多樣,包括:
- 實作不支援目標類型
- 處理此情況的適配器工廠不活動(例如 因為缺少服務引用)
- 內部條件失敗
- 服務不可用
請務必優雅地處理空大小寫。 對於jsp呈現,如果jsp失敗會導致內容為空,則可能是可接受的。
快取 caching
為了改善效能,實施可免費快取從 obj.adaptTo()
呼叫。 若 obj
相同,則傳回的物件相同。
會針對所有使用者執行此快取 AdapterFactory
根據案例。
但是,沒有一般規則 — 物件可以是新例項或現有例項。 這表示您無法依賴任何一種行為。 因此,它很重要,尤其是內部 AdapterFactory
,即物件可在此案例中重複使用。
運作方式 how-it-works
有多種方式 Adaptable.adaptTo()
可實作:
-
物體本身;實作方法本身並對應至特定物件。
-
按
AdapterFactory
,可映射任意對象。物件仍必須實作
Adaptable
介面和必須擴充SlingAdaptable
(通過adaptTo
呼叫中央適配器管理器)。這可讓鈎點進入
adaptTo
現有類的機制,例如Resource
. -
兩者結合。
在第一種情況中,Javadoc可以說明 adaptTo-targets
都是可能的。 但是,對於特定子類(例如基於JCR的資源),這通常是不可能的。 在後一種情況下, AdapterFactory
通常是套件組合的專用類別的一部分,因此在用戶端API中不會公開,也不會列在javadoc中。 從理論上講,可以訪問所有 AdapterFactory
實施 OSGi 服務運行時並查看其「適配器」(源和目標)配置,但不將它們相互映射。 最後,這取決於內部邏輯,必須加以記錄。 因此,這個參考。
參考 reference
Sling sling
資源 適應於:
ResourceResolver 適應於:
尚無目標,但實施了可適應性,可作為自定義AdapterFactory中的源。
WCM wcm
頁面 適應於:
元件 適應於:
範本 適應於:
安全性 security
DAM dam
資產 適應於:
標記 tagging
標籤 適應於:
其他 other
此外,Sling / JCR / OCM也提供 [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory)
針對自訂OCM(物件內容對應)物件。