슬링 이(가) 다음을 제공합니다 어댑터 패턴 를 구현하는 개체를 편리하게 번역하려면 적응성 인터페이스. 이 인터페이스는 제네릭을 제공합니다 adaptTo() 개체를 인수로 전달되는 클래스 형식으로 변환하는 메서드입니다.
예를 들어 리소스 객체를 해당 노드 객체로 변환하려면 다음과 같이 하면 됩니다.
Node node = resource.adaptTo(Node.class);
다음과 같은 사용 사례가 있습니다.
구현별 개체를 가져옵니다.
예를 들어 제네릭의 JCR 기반 구현입니다 Resource
인터페이스는 기본 JCR에 대한 액세스를 제공합니다. Node
.
내부 컨텍스트 객체를 전달해야 하는 객체의 바로 가기 작성.
예: 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
.
둘의 조합.
첫 번째 경우, javadoc은 다음을 진술할 수 있습니다. adaptTo-targets
가능합니다. 그러나 JCR 기반 리소스와 같은 특정 하위 클래스의 경우 이러한 작업이 불가능한 경우가 많습니다. 후자의 경우 AdapterFactory
는 일반적으로 번들의 전용 클래스의 일부이므로 클라이언트 API에 노출되지 않으며 javadocs에 나열되지 않습니다. 이론적으로 모든 것에 접근하는 것은 가능할 것이다 AdapterFactory
의 구현 OSGi 서비스 런타임에서 "적응성"(소스 및 타겟) 구성을 확인하지만 서로 매핑하지는 않습니다. 결국 이는 내부 논리에 따라 달라지는데 이를 반드시 문서화해야 한다. 따라서 이 참조입니다.
리소스 은 다음 항목에 적응합니다.
노드 | JCR 노드 기반 리소스 또는 노드를 참조하는 JCR 속성인 경우 |
속성 | JCR 속성 기반 리소스인 경우. |
항목 | JCR 기반 리소스(노드 또는 속성)인 경우 |
맵 | JCR 노드 기반 리소스(또는 다른 리소스 지원 값 맵)인 경우 속성 맵을 반환합니다. |
ValueMap | JCR 노드 기반 리소스(또는 다른 리소스 지원 값 맵)인 경우 사용하기 편리한 속성 맵을 반환합니다. 을 사용하여 (보다 간단하게) 달성할 수도 있습니다.ResourceUtil.getValueMap(Resource) (null 사례 등을 처리합니다.) |
상속 값 맵 | 확장 ValueMap 속성을 찾을 때 리소스 계층 구조를 고려할 수 있습니다. |
수정 가능한 값 맵 | 의 확장명 ValueMap를 클릭하여 해당 노드의 속성을 수정할 수 있습니다. |
입력 스트림 | 파일 리소스의 바이너리 콘텐츠 반환(JCR 노드 기반 리소스이고 노드 유형이 다음과 같은 경우) nt:file 또는 nt:resource ; 번들 리소스인 경우 파일 컨텐츠(파일 시스템 리소스인 경우) 또는 이진 JCR 속성 리소스의 데이터입니다. |
URL | 리소스에 대한 URL을 반환합니다(JCR-node 기반 리소스인 경우 이 노드의 저장소 URL, 번들 리소스인 경우 jar 번들 URL, 파일 시스템 리소스인 경우 파일 URL). |
파일 | 파일 시스템 리소스인 경우 |
SlingScript | 이 리소스가 스크립트 엔진이 sling에 등록된 스크립트(예: jsp 파일)인 경우 |
서블릿 | 이 리소스가 스크립트 엔진이 sling에 등록된 스크립트(예: jsp 파일)이거나 서블릿 리소스인 경우. |
문자열 부울 길게 Double 캘린더 값 String[] 부울[] Long[] 달력[] 값[] |
JCR 속성 기반 리소스인 경우(값이 적절한 경우) 값을 반환합니다. |
LabeledResource | JCR 노드 기반 리소스인 경우 |
페이지 | JCR 노드 기반 리소스이고 노드가 cq:Page (또는 cq:PseudoPage ). |
구성 요소 | 다음과 같은 경우: cq:Component 노드 리소스. |
디자인 | 디자인 노드인 경우(cq:Page ). |
템플릿 | 다음과 같은 경우: cq:Template 노드 리소스. |
블루프린트 | 다음과 같은 경우: cq:Template 노드 리소스. |
자산 | dam:Asset 노드 리소스인 경우. |
렌디션 | dam:Asset 렌디션(dam:Assert의 렌디션 폴더 아래에 있는 nt:file)인 경우 |
태그 | 다음과 같은 경우: cq:Tag 노드 리소스. |
UserManager | JCR 세션 기반: JCR 기반 리소스이고 사용자가 UserManager에 액세스할 수 있는 권한이 있는 경우. |
승인 가능 대상 | 승인 가능 대상은 사용자 및 그룹의 공통 기본 인터페이스입니다. |
사용자 | 사용자는 인증되고 가장될 수 있는 특별한 승인 가능 대상입니다. |
SimpleSearch | JCR 기반 리소스인 경우 리소스 아래에서 검색하거나 setSearchIn() 사용 |
WorkflowStatus | 지정된 페이지/워크플로우 페이로드 노드의 워크플로우 상태입니다. |
ReplicationStatus | 지정된 리소스 또는 해당 jcr:content 하위 노드의 복제 상태(처음 선택됨) |
ConnectorResource | JCR-노드 기반 리소스인 경우, 특정 유형에 대해 조정된 커넥터 리소스를 반환합니다. |
구성 | 다음과 같은 경우: cq:ContentSyncConfig 노드 리소스. |
ConfigEntry | 이 값이 a 미만인 경우 cq:ContentSyncConfig 노드 리소스. |
ResourceResolution 은 다음 항목에 적응합니다.
세션 | 요청의 JCR 세션(JCR 기반 리소스 확인자(기본값)인 경우). |
PageManager | |
구성 요소 관리자 | |
디자이너 | |
AssetManager | JCR 세션 기반, JCR 기반 리소스 확인자인 경우. |
TagManager | JCR 세션 기반, JCR 기반 리소스 확인자인 경우. |
UserManager | UserManager는 승인 가능한 객체(예: 사용자 및 그룹)에 대한 액세스를 제공하고 유지 관리할 수 있는 수단을 제공합니다. UserManager는 특정 세션에 바인딩됩니다. |
승인 가능 대상 | 현재 사용자입니다. |
사용자 |
현재 사용자입니다. |
QueryBuilder | |
Externalizer | 절대 URL을 외부화하는 경우(요청 개체가 없는 경우에도) |
SlingHttpServletRequest 은 다음 항목에 적응합니다.
아직 대상이 없지만 는 적응성을 구현하며 사용자 지정 AdapterFactory에서 소스로 사용할 수 있습니다.
SlingHttpServletResponse 은 다음 항목에 적응합니다.
ContentHandler (XML) |
Sling 재작성기 응답인 경우 |
페이지 은 다음 항목에 적응합니다.
리소스 |
페이지의 리소스입니다. |
LabeledResource | 레이블이 지정된 리소스(이 ==)입니다. |
노드 | 페이지의 노드입니다. |
... | 페이지의 리소스를 조정할 수 있는 모든 작업을 수행합니다. |
구성 요소 은 다음 항목에 적응합니다.
리소스 | 구성 요소의 리소스. |
---|---|
LabeledResource | 레이블이 지정된 리소스(이 ==)입니다. |
노드 | 구성 요소의 노드. |
… | 구성 요소 리소스의 모든 것을 적용할 수 있습니다. |
템플릿 은 다음 항목에 적응합니다.
리소스 |
템플릿의 리소스입니다. |
LabeledResource | 레이블이 지정된 리소스(이 ==)입니다. |
노드 | 이 템플릿의 노드 |
... | 템플릿 리소스의 모든 것을 적용할 수 있습니다. |
승인 가능 대상, 사용자 및 그룹 조정 대상:
노드 | 사용자/그룹 홈 노드를 반환합니다. |
---|---|
ReplicationStatus | 사용자/그룹 홈 노드에 대한 복제 상태를 반환합니다. |
자산 은 다음 항목에 적응합니다.
리소스 | 에셋의 리소스입니다. |
---|---|
노드 | 에셋의 노드. |
… | 에셋의 리소스를 조정할 수 있는 모든 작업. |
태그 은 다음 항목에 적응합니다.
리소스 | 태그의 리소스. |
---|---|
노드 | 태그의 노드. |
… | 태그의 리소스에 맞는 모든 항목을 조정할 수 있습니다. |
또한 Sling / JCR / OCM 은 AdapterFactory
사용자 지정 OCM용(오브젝트 콘텐츠 매핑) 개체.