Sling 어댑터 사용

어댑터 패턴을 사용하여 어댑터 인터페이스를 구현하 🔗 는 개체를 편리하게변환합니다. 이 인터페이스는 인수로 전달되는 클래스 유형으로 개체를 변환할 일반 adaptTo() 메서드를 제공합니다.

예를 들어 Resource 객체를 해당 Node 객체로 변환하려면 다음을 수행하면 됩니다.

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

사용 사례

다음과 같은 사용 사례가 있습니다.

  • 구현별 개체를 가져옵니다.

    예를 들어 일반 Resource 인터페이스의 JCR 기반 구현은 기본 JCR Node에 대한 액세스를 제공합니다.

  • 내부 컨텍스트 객체를 전달해야 하는 객체의 바로 가기 만들기

    예를 들어, JCR 기반 ResourceResolver은 요청의 JCR Session에 대한 참조를 보유하며, 이 참조는 PageManager 또는 UserManager과 같은 요청 세션을 기반으로 하는 많은 개체에 필요합니다.

  • 서비스에 바로 가기.

    드문 경우이지만 sling.getService()도 간단합니다.

Null 반환 값

adaptTo() null을 반환할 수 있습니다.

다음과 같은 다양한 이유가 있습니다.

  • 구현에서 대상 유형을 지원하지 않습니다.
  • 이 케이스를 처리하는 어댑터 팩터리가 활성 상태가 아닙니다(예: 서비스 참조가 없기 때문에)
  • 내부 조건 실패
  • 서비스를 사용할 수 없음

null 대/소문자를 적절하게 처리해야 합니다. jsp 렌더링의 경우 jsp가 실패할 경우 빈 컨텐츠가 발생할 수 있습니다.

캐싱

성능을 개선하기 위해 구현은 obj.adaptTo() 호출에서 반환된 객체를 캐시할 수 있습니다. obj이(가) 동일한 경우 반환된 객체가 동일합니다.

이 캐싱은 모든 AdapterFactory 기반 사례에 대해 수행됩니다.

그러나 일반 규칙이 없습니다. 객체는 새 인스턴스이거나 기존 인스턴스일 수 있습니다. 이것은 두 가지 행동에 의존할 수 없음을 의미합니다. 따라서 특히 AdapterFactory 내에서 이 시나리오에서 개체를 다시 사용할 수 있는 것이 중요합니다.

작동 방식

Adaptable.adaptTo()을(를) 구현할 수 있는 방법은 다양합니다.

  • 개체 자체로는;메서드 자체를 구현하고 특정 객체에 매핑을 수행합니다.

  • 임의의 객체를 매핑할 수 있는 AdapterFactory'에 의해.

    개체는 여전히 Adaptable 인터페이스를 구현해야 하며 SlingAdaptable(adaptTo 호출을 중앙 어댑터 관리자에 전달)을 확장해야 합니다.

    이렇게 하면 Resource 같은 기존 클래스에 대한 adaptTo 메커니즘에 연결할 수 있습니다.

  • 두 가지 조합입니다.

첫 번째 경우 javadocs는 adaptTo-targets이(가) 가능한 것을 나타낼 수 있습니다. 그러나 JCR 기반 리소스와 같은 특정 하위 클래스의 경우 이는 종종 가능하지 않습니다. 후자의 경우, AdapterFactory 구현은 일반적으로 번들의 개인 클래스의 일부이므로 클라이언트 API에 노출되거나 javadocs에 나열되지 않습니다. 이론적으로, OSGi 서비스 런타임에서 모든 AdapterFactory 구현에 액세스하여 "적응형"(소스 및 대상) 구성을 볼 수 있지만 서로 매핑하지 않을 수 있습니다. 결국, 이것은 문서화되어야 하는 내부 논리에 따라 다릅니다. 따라서 이 참조가 있습니다.

참조

슬링

리소스 는 다음 항목에 맞게 조정됩니다.

노드 이것이 JCR 노드 기반 리소스이거나 노드를 참조하는 JCR 속성일 경우
속성 JCR 속성 기반 리소스인 경우.
항목 JCR 기반 리소스(노드 또는 속성)인 경우.
JCR 노드 기반 리소스(또는 값 맵을 지원하는 기타 리소스)인 경우 속성의 맵을 반환합니다.
ValueMap JCR 노드 기반 리소스(또는 값 맵을 지원하는 기타 리소스)인 경우 속성의 사용하기 쉬운 맵을 반환합니다.
ResourceUtil.getValueMap(Resource)(null 케이스 처리 등)를 사용하여(더욱 간단함)할 수도 있습니다.
InheritanceValueMap 속성을 찾을 때 리소스 계층 구조를 고려할 수 있도록 하는 ValueMap의 확장입니다.
PersisstableValueMap 이 리소스가 JCR 노드 기반 리소스이고 해당 노드에서 속성을 수정할 수 있는 권한이 사용자에게 있는 경우,
참고:여러 지속 가능한 맵은 해당 값을 공유하지 않습니다.
InputStream "파일"의 이진 내용을 반환합니다.nt:resource
AuthorizableResourceProviderorg.apache.sling.jackrabbit.usermanager/system/userManager
cq:Pagecq:PseudoPage
cq:Component
cq:Page
cq:Template
cq:Page
cq:Tag
cq:Preferences
cq:ContentSyncConfig
cq:ContentSyncConfig

ResourceResolution 이 다음 항목에 맞게 조정됩니다.

세션 요청의 JCR 세션(JCR 기반 리소스 확인자(기본값)입니다.
PageManager
ComponentManager
디자이너
AssetManager JCR 기반 리소스 확인자인 경우 JCR 세션을 기반으로 합니다.
TagManager JCR 기반 리소스 확인자인 경우 JCR 세션을 기반으로 합니다.
UserManager JCR 세션을 기반으로 하며, JCR 기반 리소스 확인자이고 사용자에게 UserManager에 대한 액세스 권한이 있는 경우.
승인 가능 대상 현재 사용자입니다.
사용자
현재 사용자입니다.
권한 관리자
환경 설정 현재 사용자의 기본 설정(JCR 기반 리소스 확인자인 경우 JCR 세션 기준).
기본 설정 서비스
PinManager
QueryBuilder
Externalizer 절대 URL을 외부화하기 위해, 요청 개체를 제외한 경우에도 사용하십시오.

SlingHttpServletRequestions는 다음 항목에 맞게 조정됩니다.

타겟이 아직 없지만 Adaptable을 구현하며 사용자 지정 AdapterFactory에서 소스로 사용할 수 있습니다.

SlingHttpServletResponseadapts는 다음과 같습니다.

ContentHandler
(XML)
sling rewriter 응답인 경우

WCM

페이지 는 다음 항목에 맞게 조정됩니다.

리소스
페이지의 리소스입니다.
LabeledResource 레이블이 지정된 리소스(== 이).
노드 페이지의 노드.
... 페이지 리소스를 조정할 수 있는 모든 것.

구성 요소 는 다음 항목에 맞게 조정됩니다.

리소스 구성 요소의 리소스입니다.
LabeledResource 레이블이 지정된 리소스(== 이).
노드 구성 요소의 노드.
구성 요소의 리소스를 조정할 수 있는 모든 것.

템플릿 은 다음과 같이 적응합니다.

리소스
템플릿의 리소스입니다.
LabeledResource 레이블이 지정된 리소스(== 이).
노드 이 템플릿의 노드입니다.
... 템플릿 리소스를 조정할 수 있는 모든 것.

보안

작성 가능, 사용자 그룹은 다음 항목에 맞게 적용됩니다.

노드 사용자/그룹 홈 노드를 반환합니다.
ReplicationStatus 사용자/그룹 홈 노드의 복제 상태를 반환합니다.

DAM

자산 은 다음 항목에 맞게 조정됩니다.

리소스 자산의 리소스.
노드 자산의 노드.
자산의 리소스를 조정할 수 있는 모든 것.

태깅

태그는 다음 항목에 맞게 조정됩니다.

리소스 태그의 리소스.
노드 태그의 노드입니다.
태그의 리소스에 적용할 수 있는 모든 것.

기타

또한 Sling / JCR / OCM은 사용자 지정 OCM(개체 컨텐트 매핑) 개체에 대한 [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory)도 제공합니다.

이 페이지에서는

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now