Способы регистрации слинг-сервлета - 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). Вы можете найти это здесь

Другие вопросы по тегам