AEM - Sling | Community
Skip to main content
Level 2
April 10, 2025
Solved

AEM - Sling

Hi @16227148,

 

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?

 

tushaar_srivastava
tushaar_srivastavaAccepted solution
Level 6
April 10, 2025

7 replies

Jagadeesh_Prakash
New Participant
April 11, 2025

@yaminikolhe 

 

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

Translate
Level 2
April 11, 2025

@jagadeesh_prakash Thank you

Translate
PRATHYUSHA_VP
New Participant
April 10, 2025
Level 2
April 11, 2025

@prathyusha_vp Thank you for sharing such helpful information.

Translate
tushaar_srivastava
tushaar_srivastavaAccepted solution
Level 6
April 10, 2025
Level 2
April 11, 2025

@tushaar_srivastava Thank you for sharing such helpful information.

Translate
tushaar_srivastava
Level 6
April 11, 2025

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

Translate