Sling Adapters using-sling-adapters
Sling biedt een Adapterpatroon om objecten die het Aanpasbaar interface. Deze interface verstrekt een generiek adjustTo() methode die het object omzet in het klassentype dat als argument wordt doorgegeven.
Bijvoorbeeld om een voorwerp van het Middel aan het overeenkomstige voorwerp van de Knoop te vertalen, kunt u eenvoudig doen:
Node node = resource.adaptTo(Node.class);
Gevallen gebruiken use-cases
Er zijn de volgende gebruiksgevallen:
-
Hiermee krijgt u implementatiespecifieke objecten.
Bijvoorbeeld een op JCR gebaseerde implementatie van het generieke
Resourceinterface biedt toegang tot het onderliggende JCRNode. -
Het maken van sneltoetsen voor objecten waarvoor interne contextobjecten moeten worden doorgegeven.
Bijvoorbeeld op basis van de JCR
ResourceResolverbevat een verwijzing naar deJCR Session, die op zijn beurt nodig is voor veel objecten die op die aanvraagsessie zullen werken, zoals dePageManagerofUserManager. -
Snelkoppeling naar services.
Een zeldzame zaak -
sling.getService()is ook eenvoudig.
Null-retourwaarde null-return-value
adaptTo() kan null retourneren.
Hiervoor zijn verschillende redenen, waaronder:
- de implementatie ondersteunt het doeltype niet
- een adapterfabriek die deze zaak afhandelt, is niet actief (bijv. vanwege ontbrekende serviceverwijzingen)
- interne voorwaarde is mislukt
- service is niet beschikbaar
Het is belangrijk dat u de null-case netjes afhandelt. Voor jsp-renderingen kan het acceptabel zijn dat de jsp mislukt als dat resulteert in een leeg stuk inhoud.
Caching caching
Om de prestaties te verbeteren, kunnen implementaties het object dat door een obj.adaptTo() vraag. Als de obj gelijk is, is het geretourneerde object hetzelfde.
Deze caching wordt uitgevoerd voor alle AdapterFactory gegronde gevallen.
Er is echter geen algemene regel: het object kan een nieuw of een bestaand object zijn. Dit betekent dat u niet op één van beide gedrag kunt vertrouwen. Daarom is het belangrijk, vooral binnen AdapterFactory, dat de objecten in dit scenario opnieuw kunnen worden gebruikt.
Hoe werkt het how-it-works
Er zijn verschillende manieren om Adaptable.adaptTo() kan worden uitgevoerd:
-
door het object zelf; het implementeren van de methode zelf en het toewijzen aan bepaalde objecten.
-
Met een
AdapterFactory, die willekeurige objecten kunnen toewijzen.De objecten moeten de
Adaptableinterface en moet worden uitgebreidSlingAdaptable(die deadaptToaanroep aan een centrale adaptermanager).Hierdoor kunnen haken in de
adaptTomechanisme voor bestaande klassen, zoalsResource. -
Een combinatie van beide.
In het eerste geval kunnen de javadocs aangeven wat adaptTo-targets zijn mogelijk. Voor specifieke subklassen zoals de op JCR gebaseerde Resource is dit echter vaak niet mogelijk. In het laatste geval worden AdapterFactory ze maken doorgaans deel uit van de klassen van het type private van een bundel en worden dus niet weergegeven in een client-API, en worden ook niet vermeld in javadocs. Theoretisch gezien zou het mogelijk zijn om alle AdapterFactory implementaties van de OSGi de dienstruntime en kijken naar hun "aanpasbare"configuraties (bronnen en doelstellingen), maar niet om hen aan elkaar in kaart te brengen. Uiteindelijk hangt dit af van de interne logica, die moet worden gedocumenteerd. Vandaar deze verwijzing.
Referentie reference
Sling sling
Resource aanpassen aan:
ResourceResolver aanpassen aan:
SlingHttpServletRequest aanpassen aan:
Geen doelstellingen nog, maar voert Aangepast uit en kon als bron in een douane AdapterFactory worden gebruikt.
SlingHttpServletResponse aanpassen aan:
WCM wcm
Pagina aanpassen aan:
Component aanpassen aan:
Sjabloon aanpassen aan:
Beveiliging security
Toestemming, Gebruiker en Groep aanpassen aan:
DAM dam
Element aanpassen aan:
Tags tagging
Tag aanpassen aan:
Overige other
Daarnaast biedt Sling / JCR / OCM ook een [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory) voor aangepaste OCM (Objectinhoud toewijzen).