使用 Sling 介面卡

吊帶 提供 適配器模式 方便地轉換實現 適應性 。 此介面提供泛型 adaptTo() 將對象轉換為作為參數傳遞的類類型的方法。

例如,要將資源對象轉換為相應的節點對象,您只需執行以下操作:

Node node = resource.adaptTo(Node.class);

使用案例

有以下使用情形:

  • 獲取特定於實現的對象。

    例如,基於JCR的泛型實現 Resource 介面提供對基礎JCR的訪問 Node

  • 需要傳遞內部上下文對象的對象的快捷方式建立。

    例如,基於JCR ResourceResolver 保存對請求的引用 JCR Session,這反過來對於將基於該請求會話工作的許多對象是必需的,如 PageManagerUserManager

  • 服務的快捷方式。

    一個罕見的案例。 sling.getService() 也很簡單。

空返回值

adaptTo() 可以返回null。

原因有多種,包括:

  • 實現不支援目標類型
  • 處理此情況的適配器工廠不處於活動狀態(例如 由於缺少服務引用)
  • 內部條件失敗
  • 服務不可用

您必須優雅地處理空小寫。 對於jsp渲染,如果jsp失敗將導致內容為空,則可以接受。

快取

為了提高效能,實現可以自由地快取從 obj.adaptTo() 呼叫。 如果 obj 相同,返回的對象相同。

此快取對所有 AdapterFactory 基於案例。

但是,沒有一般規則 — 對象可以是新實例或現有實例。 這意味著你不能依賴任何一種行為。 所以它很重要,特別是內部 AdapterFactory,在此場景中對象是可重用的。

它的工作原理

有多種方法 Adaptable.adaptTo() 可以實現:

  • 物體本身;實現方法本身並映射到特定對象。

  • AdapterFactory,可映射任意對象。

    對象仍必須實現 Adaptable 介面必須擴展 SlingAdaptable (通過 adaptTo 呼叫中央適配器管理器)。

    這允許在 adaptTo 現有類的機制,例如 Resource

  • 兩者兼有。

對於第一種情況,javadoc可以說明 adaptTo-targets 是可能的。 但是,對於特定子類(如基於JCR的資源),通常不可能這樣做。 在後一種情況下, AdapterFactory 通常是捆綁包的私有類的一部分,因此不會在客戶端API中公開,也不會在javadocs中列出。 理論上,我們有可能 AdapterFactory 實現 OSGi 服務運行時並查看其「adaptables」(源和目標)配置,但不是將它們映射到彼此。 最後,這取決於內部邏輯,而這必須記錄在案。 因此,這個引用。

引用

Sling

資源 調整為:

節點 如果這是基於JCR節點的資源或引用節點的JCR屬性。
屬性 如果這是基於JCR屬性的資源。
項目 如果這是基於JCR的資源(節點或屬性)。
地圖 如果這是基於JCR節點的資源(或其他支援值映射的資源),則返回屬性的映射。
值映射 如果屬性是基於JCR節點的資源(或其他資源支援值映射),則返回屬性的便於使用的映射。 還可以通過使用
ResourceUtil.getValueMap(Resource) (處理空大小寫等)。
繼承值映射 擴展 值映射 這允許在查找屬性時考慮資源層次。
可修改值映射 擴展 值映射,允許您修改該節點上的屬性。
輸入流 返回檔案資源的二進位內容(如果這是基於JCR節點的資源,且節點類型為 nt:filent:resource;如果這是捆綁資源;檔案內容(如果這是檔案系統資源)或二進位JCR屬性資源的資料。
URL 返回資源的URL(如果是基於JCR節點的資源,則返回此節點的儲存庫URL;jar捆綁URL(如果這是捆綁資源);檔案URL(如果這是檔案系統資源)。
檔案 如果這是檔案系統資源。
SlingScript 如果此資源是指令碼(例如jsp檔案),則指令碼引擎將為其註冊sling。
Servlet 如果此資源是指令碼(例如jsp檔案),其中指令碼引擎使用sling註冊,或者這是servlet資源。
字串
布爾型


日曆

字串[]
布爾[]
長[]
日曆[]
值[]
如果這是基於JCR屬性的資源(且值適合),則返回值。
標籤資源 如果這是基於JCR節點的資源。
頁面 如果這是基於JCR的資源,而節點是 cq:Pagecq:PseudoPage)。
元件 如果這是 cq:Component 節點資源。
設計 如果這是設計節點(cq:Page)。
範本 如果這是 cq:Template 節點資源。
Blueprint 如果這是 cq:Template 節點資源。
資產 如果這是dam:Asset節點資源。
轉譯 如果這是dam:Asset格式副本(nt:檔案,位於dam:Assert格式副本資料夾下)
標記 如果這是 cq:Tag 節點資源。
用戶管理器 如果這是基於JCR的資源且用戶具有訪問UserManager的權限,則基於JCR會話。
可授權項目 「可授權」是用戶和組的通用基介面。
使用者 用戶是可驗證和模擬的特殊授權。
簡單搜索 如果資源是基於JCR的資源,則在資源(或使用setSearchIn())下搜索。
工作流狀態 給定頁/工作流負載節點的工作流狀態。
複製狀態 給定資源或其jcr:content子節點的複製狀態(首先選中)。
連接器資源 如果是基於JCR節點的資源,則返回特定類型的適配連接器資源。
設定 如果這是 cq:ContentSyncConfig 節點資源。
配置條目 如果這低於 cq:ContentSyncConfig 節點資源。

資源解析器 調整為:

會話 如果這是基於JCR的資源解析器(預設),則請求的JCR會話。
頁面管理器  
元件管理器  
設計師  
資產管理器 基於JCR會話,如果這是基於JCR的資源解析器。
標籤管理器 基於JCR會話,如果這是基於JCR的資源解析器。
用戶管理器 UserManager提供了對可授權對象(即用戶和組)的訪問和維護手段。 UserManager綁定到特定會話。
可授權項目 當前用戶。
使用者
當前用戶。
查詢生成器
外部化器 用於外部化絕對URL,即使沒有請求對象。

SlingHttpServletRequest 調整為:

尚無目標,但實現了Adaptible,可以用作自定義AdapterFactory中的源。

SlingHttpServletResponse 調整為:

內容處理程式
(XML)
如果這是吊帶重寫器的回應。

WCM

頁面 調整為:

資源
頁的資源。
標籤資源 已標籤資源(==此)。
節點 頁面的節點。
... 頁面資源可以適應的所有內容。

元件 調整為:

資源 元件的資源。
標籤資源 已標籤資源(==此)。
節點 元件的節點。
元件的資源可以適應的所有內容。

模板 調整為:

資源
模板的資源。
標籤資源 已標籤資源(==此)。
節點 此模板的節點。
... 模板資源可以適應的所有內容。

安全性

可授權用戶 適應:

節點 返回用戶/組主節點。
複製狀態 返回用戶/組主節點的複製狀態。

DAM

資產 調整為:

資源 資產的資源。
節點 資產的節點。
該資產的所有資源都可以適應。

標記

標籤 調整為:

資源 標籤的資源。
節點 標籤的節點。
標籤的資源可以適應的所有內容。

其他

此外,Sling/JCR/OCM還提供 AdapterFactory 用於自定義OCM(對象內容映射)對象。

本頁內容