Способы регистрации слинг-сервлета - Adobe AEM/CQ
Существует два способа регистрации Sling Servlet в соответствии с документацией
Во-первых @SlingServlet
@SlingServlet(
resourceTypes = "sling/servlet/default",
selectors = "hello",
extensions = "html",
methods = "GET")
public class MyServlet extends SlingSafeMethodsServlet {
@Override
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
...
}
}
Второе использование @Properties
@Component(metatype = true)
@Service(Servlet.class)
@Properties({
@Property(name = "sling.servlet.resourceTypes", value = "sling/servlet/default"),
@Property(name = "sling.servlet.selectors", value = "hello"),
@Property(name = "sling.servlet.extensions", value = "html"),
@Property(name = "sling.servlet.methods", value = "GET")
})
public class MyServlet extends SlingSafeMethodsServlet {
@Override
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
...
}
}
Документация не перечисляет никаких преимуществ конкретного подхода перед другими. Один из членов моей команды спросил об этом. Одна вещь, о которой я мог подумать, это @Properties
Позвольте нам дать настраиваемые свойства, которые можно изменить с консоли OSGi ( http://localhost:4502/system/console/components, предполагая, что CQ работает локально на порту 4502). Есть ли разница или преимущество использования определенного подхода?
1 ответ
@SlingServlet
уменьшает шаблон, необходимый для создания сервлета. Некоторые из перечисленных вами свойств, как methods = "GET"
уже установлены по умолчанию, поэтому вам не нужно перенастраивать его. Все вместе, это делает аннотацию намного более краткой.
Внутренне, как и все аннотации SCR, аннотация преобразуется в файл XML, поэтому вы не сможете различить, как был реализован сервлет, просто взглянув на экземпляр с развернутым кодом.
Ничто не ограничивает вас в добавлении дополнительного @Property
определения, если вы хотите указать поставщика или описание услуги. Имейте в виду, последний на самом деле доступен в @SlingServlet
еще раз аннотации - вы сразу же выиграете от его использования!
Я также рекомендую вам прочитать отличную презентацию моего Michal Chudy, который описал некоторые из лучших практик разработки AEM (включая ваш случай @SlingServlet
). Вы можете найти это здесь