Способы регистрации сервлета Sling — Adobe AEM/CQ

Существует два способа регистрации сервлета Sling в соответствии с документацией.

Первый @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). Есть ли разница или преимущество использования конкретного подхода?


person Sandeep Kumar    schedule 24.07.2015    source источник


Ответы (1)


@SlingServlet уменьшает шаблон, необходимый для создания сервлета. Некоторые из перечисленных вами свойств, например methods = "GET", уже установлены по умолчанию, поэтому вам не нужно их перенастраивать. Все вместе делает аннотацию более лаконичной.

Внутри, как и все аннотации SCR, аннотация транслируется в файл XML, поэтому вы не сможете отличить, как был реализован сервлет, просто взглянув на экземпляр с развернутым кодом.

Ничто не ограничивает вас в добавлении дополнительных @Property определений, если вы хотите указать поставщика или описание услуги. Имейте в виду, что последний на самом деле доступен в аннотации @SlingServlet, так что еще раз — вы сразу же выиграете от его использования!

Я также рекомендую вам прочитать отличную презентацию моего коллеги, которая описала некоторые передовые методы разработки AEM (включая ваш случай из @SlingServlet). Вы можете найти его здесь

person Mateusz Chromiński    schedule 24.07.2015