Эти статьи дают хорошее объяснение:
Первая ссылка отмечает, что
"В некоторых случаях вам может понадобиться получить объект Request внутри
модель стропа или вы хотите адаптировать модель стропа с помощью
SlingHttpServletRequest объект (где вы не хотите создавать
ресурсный объект). "
Вторая ссылка упоминает
"Многие проекты Sling хотят иметь возможность создавать объекты моделей - POJO
которые автоматически отображаются из объектов Sling, как правило,
ресурсы, но и объекты запроса. Иногда эти POJO нуждаются в OSGi
услуги, а также. "
То есть, используете ли вы один адаптируемый или другой (или оба одновременно), зависит от того, что вам нужно в вашей модели. В этом примере он создает модель, которая должна считывать некоторые значения из ресурса, а другие - из запроса, поэтому адаптируемость, которую вы будете использовать, зависит от того, какие значения вам нужны в вашей модели. Вот пример класса в этой первой ссылке, который показывает «сообщение», которому нужны данные из ресурса (имя и фамилия) и данные из запроса (путь):
package com.aem.core.models;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.models.annotations.Model;
import org.apache.sling.models.annotations.Via;
import org.apache.sling.models.annotations.injectorspecific.SlingObject;
import org.apache.sling.models.annotations.DefaultInjectionStrategy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Model(adaptables = {SlingHttpServletRequest.class, Resource.class}, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
public class AdaptationModel {
Logger logger = LoggerFactory.getLogger(this.getClass());
private String message;
@SlingObject
private SlingHttpServletRequest request;
@Inject @Via("resource")
private String firstName;
@Inject @Via("resource")
private String lastName;
@PostConstruct
protected void init() {
message = "Hello World\n";
if (request != null) {
this.message += "Request Path: "+request.getRequestPathInfo().getResourcePath()+"\n";
}
message += "First Name: "+ firstName +" \n";
message += "Last Name: "+ lastName + "\n";
logger.info("inside post construct");
}
public String getMessage() {
return message;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
}