Sling 提供 介面卡模式 方便翻譯實作 可調整 介面。 此介面提供了一般 adaptTo() 將物件轉譯成作為引數傳遞的類別型別的方法。
例如,若要將Resource物件轉譯為對應的Node物件,您只需執行下列動作即可:
Node node = resource.adaptTo(Node.class);
有以下使用案例:
取得實作特定的物件。
需要傳遞內部前後關聯物件的物件的快速鍵建立。
例如,以JCR為基礎 ResourceResolver
保留對請求的 JCR Session
,根據此請求工作階段工作的許多物件則需要這些資源,例如 PageManager
或 UserManager
.
服務的捷徑。
罕見情況 — sling.getService()
也很簡單。
adaptTo()
傳回null。
原因有很多,包括:
請務必謹慎處理Null案例。 對於jsp轉譯,如果會導致jsp失敗,那是可以接受的。
為改善效能,實施可自由快取從傳回的物件 obj.adaptTo()
呼叫。 如果 obj
相同,則傳回的物件相同。
系統會針對所有使用者執行此快取 AdapterFactory
根據個案。
但是,沒有一般規則 — 物件可能是新例項或現有例項。 這表示您無法依賴任一行為。 因此,這很重要,尤其是在內部 AdapterFactory
,表示此情境中可重複使用物件。
有多種方式可以 Adaptable.adaptTo()
可以實作:
物件本身;實作方法本身並對應至特定物件。
按 AdapterFactory
,可對應任意物件。
物件仍必須實作 Adaptable
介面且必須擴充 SlingAdaptable
(會傳遞 adaptTo
呼叫中央介面卡管理員)。
這可讓連結至 adaptTo
現有類別的機制,例如 Resource
.
兩者的組合。
對於第一種情況,Java™檔案可以說明 adaptTo-targets
是可能的。 然而,對於特定子類別(例如JCR型資源),通常無法執行此操作。 在後一種情況下,實施 AdapterFactory
通常是套件私用類別的一部分,因此不會顯示在使用者端API中,也不會列在Java™檔案中。 理論上來說,您可以存取 AdapterFactory
來自的實作 osgi 服務執行階段並檢視其「可調整性」(來源和目標)設定,但不會相互對應。 最後,這取決於內部邏輯,這必須記錄在案。 因此,請參閱此參考檔案。
資源 可調整為:
節點 | 如果這是以JCR節點為基礎的資源,或參照節點的JCR屬性。 |
屬性 | 如果這是JCR屬性型資源 |
項目 | 如果這是JCR型資源(節點或屬性) |
地圖 | 如果這是JCR節點型資源(或其他支援值的資源對應),則傳回屬性的對應 |
ValueMap | 如果這是JCR節點型資源(或其他支援值的資源對應),則傳回方便使用的屬性對應。 也可使用(更簡單)達成ResourceUtil.getValueMap(Resource) (處理null大小寫等) |
InheritanceValueMap | 延伸 值圖 這允許在尋找屬性時考慮資源的階層 |
ModifiableValueMap | 的延伸 值圖,可讓您修改該節點上的屬性 |
輸入資料流 | 傳回檔案資源的二進位內容(如果這是JCR節點型資源,且節點型別為 nt:file 或 nt:resource ;若為套件資源;若為檔案系統資源,則為檔案內容)或二進位JCR屬性資源的資料 |
URL | 傳回資源的URL (如果這是JCR節點型資源,則傳回此節點的存放庫URL;如果這是套件資源,則傳回jar套件URL;如果這是檔案系統資源,則傳回檔案URL) |
檔案 | 如果這是檔案系統資源 |
SlingScript | 如果此資源是指令碼(例如jsp檔案),其指令碼引擎已向sling註冊 |
Servlet | 如果此資源是向sling註冊指令碼引擎的指令碼(例如jsp檔案),或如果這是servlet資源。 |
字串 布林值 長 兩次 行事曆 值 String[] 布林值[] Long[] 行事曆[] Value[] |
如果這是JCR屬性型資源(且值符合),則傳回值。 |
LabeledResource | 如果這是JCR節點型資源 |
Page | 如果這是JCR節點型資源,且節點為 cq:Page (或 cq:PseudoPage ) |
元件 | 如果這是 cq:Component 節點資源 |
設計 | 如果這是設計節點(cq:Page ) |
範本 | 如果這是 cq:Template 節點資源 |
藍圖 | 如果這是 cq:Template 節點資源 |
資產 | 如果這是dam:Asset節點資源 |
轉譯 | 如果這是dam:Asset轉譯(nt:file,在dam:Assert的轉譯資料夾下) |
標記 | 如果這是 cq:Tag 節點資源 |
使用者管理員 | 根據JCR工作階段,如果這是JCR型資源,而且使用者有權存取UserManager |
可授權項目 | 「可授權專案」是「使用者」和「群組」的共同基礎介面 |
使用者 | 使用者是可驗證及模擬的特殊可授權專案 |
Simplesearch | 在資源底下搜尋(如果這是JCR型資源,則使用setSearchIn()) |
工作流程狀態 | 特定頁面/工作流程裝載節點的工作流程狀態 |
復寫狀態 | 指定資源或其jcr:content子節點的復寫狀態(請先核取) |
聯結器資源 | 如果這是JCR節點型資源,則傳回適合特定型別的聯結器資源 |
設定 | 如果這是 cq:ContentSyncConfig 節點資源 |
ConfigEntry | 如果低於 cq:ContentSyncConfig 節點資源 |
ResourceResolver 可調整為:
工作階段 | 請求的JCR工作階段(如果這是JCR型資源解析器) (預設) |
PageManager | |
元件管理員 | |
Designer | |
Assetmanager | 根據JCR工作階段,如果這是JCR型資源解析程式 |
標籤管理員 | 根據JCR工作階段,如果這是JCR型資源解析程式 |
使用者管理員 | UserManager提供可授權物件(即使用者和群組)的存取權及維護方法。 UserManager繫結至特定工作階段 |
可授權項目 | 目前使用者 |
使用者 |
目前使用者 |
Querybuilder | |
Externalizer | 用於將絕對URL外部化,即使沒有請求物件亦然 |
SlingHttpServletRequest 可調整為:
尚未有目標,但實作可調整的,而且可以在自訂AdapterFactory中作為來源使用。
SlingHttpServletResponse 可調整為:
ContentHandler (XML) |
如果這是Sling重寫程式回應 |
頁面 可調整為:
Resource |
頁面資源 |
LabeledResource | 已標示的資源(==此) |
節點 | 頁面節點 |
... | 頁面資源可適應的所有內容 |
元件 可調整為:
Resource | 元件的資源。 |
---|---|
LabeledResource | 已標示的資源(==此)。 |
節點 | 元件的節點。 |
… | 元件資源可適應的所有專案。 |
範本 可調整為:
Resource |
範本的資源 |
LabeledResource | 已標示的資源(==此) |
節點 | 此範本的節點 |
... | 可調整範本資源的所有內容。 |
可授權, 使用者和 群組** 適應:
節點 | 傳回使用者/群組主節點。 |
---|---|
復寫狀態 | 傳回使用者/群組主節點的復寫狀態。 |
資產 可調整為:
Resource | 資產的資源。 |
---|---|
節點 | 資產的節點。 |
… | 資產資源可適應的所有內容。 |
標籤 可調整為:
Resource | 標籤的資源。 |
---|---|
節點 | 標籤的節點。 |
… | 標籤的資源可適應的所有內容。 |
此外,Sling / JCR / OCM也提供 [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory)
自訂OCM (物件內容對應)物件。