Sling Adapters gebruiken using-sling-adapters
het Verschuiven biedt een patroon van de Adapter aan om voorwerpen gemakkelijk te vertalen die de Aanpasbare interface uitvoeren. Deze interface verstrekt een generische adjustTo () methode die het voorwerp aan het klassentype vertaalt dat als argument wordt overgegaan.
Als u bijvoorbeeld een Resource-object naar het corresponderende Node-object wilt vertalen, kunt u gewoon het volgende doen:
Node node = resource.adaptTo(Node.class);
Gevallen gebruiken use-cases
Er zijn de volgende gebruiksgevallen:
-
Hiermee krijgt u implementatiespecifieke objecten.
Bijvoorbeeld, verleent een op JCR-Gebaseerde implementatie van de generische
Resource interface toegang tot onderliggende JCRNode. -
Het maken van sneltoetsen voor objecten waarvoor interne contextobjecten moeten worden doorgegeven.
Bijvoorbeeld, op JCR-Gebaseerd
ResourceResolver houdt een verwijzing naar verzoekJCR Session, die beurtelings voor vele voorwerpen nodig is die op die verzoekzitting, zoalsPageManager ofUserManager zullen werken. -
Snelkoppeling naar services.
Een zeldzaam geval -
sling.getService()is ook eenvoudig.
Null-retourwaarde null-return-value
adaptTo() retourneert null.
Hiervoor zijn verschillende redenen, waaronder:
- de implementatie ondersteunt het doeltype niet
- een adapterfabriek die deze kwestie behandelt is niet actief (bijvoorbeeld wegens ontbrekende de dienstverwijzingen)
- 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() -aanroep is geretourneerd, in de cache plaatsen. Wanneer obj hetzelfde is, is het geretourneerde object hetzelfde.
Deze caching wordt uitgevoerd voor alle AdapterFactory gebaseerde 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 objecten in dit scenario opnieuw kunnen worden gebruikt.
Hoe werkt het how-it-works
U kunt Adaptable.adaptTo() op verschillende manieren implementeren:
-
Door het object zelf; de methode zelf implementeren en aan bepaalde objecten toewijzen.
-
Door een
AdapterFactory, die willekeurige voorwerpen in kaart kan brengen.De objecten moeten nog steeds de
Adaptableinterface implementeren en moetenSlingAdaptable uitbreiden (die deadaptToaanroep aan een centrale adaptermanager doorgeeft).Hiermee kunt u haken toevoegen aan het mechanisme
adaptTovoor bestaande klassen, zoalsResource. -
Een combinatie van beide.
In het eerste geval kunnen de Java™-documenten aangeven wat adaptTo-targets mogelijk is. Voor specifieke subklassen zoals de op JCR gebaseerde Resource is dit echter vaak niet mogelijk. In het laatste geval maken implementaties van AdapterFactory doorgaans deel uit van de klassen van het type private van een bundel en worden deze dus niet weergegeven in een client-API, en worden ze niet vermeld in Java™-documenten. Theoretisch, zou het mogelijk zijn om tot alle AdapterFactory implementaties van OSGi de dienstruntime toegang te hebben en hun "adaptables"(bronnen en doelstellingen) configuraties te bekijken, 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
Middel past aan:
ResourceResolver past aan:
SlingHttpServletRequest past aan:
Geen doelstellingen nog, maar voert Aangepast uit en kon als bron in een douane AdapterFactory worden gebruikt.
SlingHttpServletResponse past aan:
WCM wcm
Pagina past aan:
Component past aan:
Malplaatje past aan:
Beveiliging security
Toegelaten, Gebruiker, en Groep** past aan:
DAM dam
Activa past aan:
Tags tagging
markering past aan:
Overige other
Voorts verstrekt het Verdelen / JCR / OCM ook een [AdapterFactory](https://sling.apache.org/site/adapters.html#Adapters-AdapterFactory) voor douaneOCM ( de Inhoud van Objecten Toewijzing ) voorwerpen.