Hi @everyone,
In Adobe Experience Manager (AEM), when defining a Sling Model with the following adaptation:
@Model(adaptables = { Resource.class, SlingHttpServletRequest.class })
What is the purpose of still using the @Self annotation for fields such as:
@Self
private Resource resource;
@Self
private SlingHttpServletRequest request;
How does the @Self annotation interact with the @Model(adaptables) declaration, and what is the significance of using both in a Sling Model?
Solved! Go to Solution.
Views
Replies
Total Likes
Hi @YaminiKolhe
You can go through including videos: http://www.sgaemsolutions.com/2017/08/deep-dive-on-sling-models-part-1.html
https://satyamblogs.medium.com/sling-model-annotation-detailed-in-aem-4af0345d43ec
https://taradevko.com/aem/sling-models-self-annotation/
Kindly go through all 3 links in detail and let's discuss any specific questions on it.
Hi @YaminiKolhe
You can go through including videos: http://www.sgaemsolutions.com/2017/08/deep-dive-on-sling-models-part-1.html
https://satyamblogs.medium.com/sling-model-annotation-detailed-in-aem-4af0345d43ec
https://taradevko.com/aem/sling-models-self-annotation/
Kindly go through all 3 links in detail and let's discuss any specific questions on it.
@tushaar_srivastava Thank you for sharing such helpful information.
Views
Replies
Total Likes
if that information solves your question do mark the above comment as correct reply, so that other can also get benefited!
Thanks for raising this important question
Hi,
Please find the detailed explanation in below thread -
https://sling.apache.org/documentation/bundles/models.html#available-injectors
Hope this helps
Thanks
@PRATHYUSHA_VP Thank you for sharing such helpful information.
Views
Replies
Total Likes
Great question—this touches on a subtle but important aspect of how Sling Models resolve dependencies using annotations like @Model and @Self.
Purpose of @Model(adaptables = { ... })
@Model(adaptables = { Resource.class, SlingHttpServletRequest.class })
You're telling Sling Models that this class can be instantiated (adapted) from either a Resource or a SlingHttpServletRequest
So when code like this runs:
modelFactory.getModelFromWrappedRequest(request, MyModel.class);
or
resource.adaptTo(MyModel.class);
It will look for a matching adaptable type and attempt to inject the model.
What does @Self mean then?
The @Self annotation is used on fields or constructor parameters inside the model to inject the same object that was used to adapt the model.
For ex:
@Self
private Resource resource;
Here’s what this does:
- If the model was adapted from a Resource, resource will be injected with that same Resource.
- If the model was adapted from a SlingHttpServletRequest, the framework will try to get a Resource from the request (i.e., request.getResource()) and inject that.
Hope this is clear
@Jagadeesh_Prakash Thank you
Views
Likes
Replies
Views
Likes
Replies
Views
Likes
Replies