Подтвердить что ты не робот

Порядок выполнения ServletContextListener

Как определить порядок выполнения ServletContextListener за счет запуска приложения, если у меня есть несколько ServletContextListener, а некоторые из них объявлены в дескрипторе развертывания и другие с аннотацией (@WebListener)?

4b9b3361

Ответ 1

Если вы хотите выполнить прослушиватели в определенном порядке, вы должны использовать дескриптор развертывания для их определения.

Ниже операторы скопированы из Спецификация сервлета:

8.2.3:

Если порядок, в котором вызывается прослушиватели, сервлеты, фильтры, является важным для приложения, тогда должен использоваться дескриптор развертывания. При использовании аннотаций для определения слушателей, сервлетов и фильтров порядок, в котором они вызывается, не указан.

Порядок будет основан на порядке, в котором они определены в дескрипторе и элементе абсолютного упорядочения в web.xml или в элементе упорядочения в web-fragment.xml.

До этого выпуска спецификации (Java ™ Servlet Спецификация, версия 3), прослушиватели контекста вызывались случайным образом заказ. Начиная с Servlet 3.0, слушатели вызывают в порядке, указанном в которые они объявлены в web.xml.

Реализации javax.servlet.ServletContextListener вызываются по методу contextInitialized в том порядке, в котором они были объявлены, и по методу contextDestroyed в обратном порядке.

Если у вас есть несколько ServletContextListeners, и некоторые из них объявлены в дескрипторе развертывания, а другие - аннотацией, то его слушатели, определенные в web.xml, получат приоритет. Ниже оператор копируется из того же раздела (8.2.3) спецификации сервлета:

Конфигурация, указанная в главном web.xml или веб-фрагменте, имеет приоритет над конфигурацией, указанной аннотациями.

Ответ 2

Кажется, вы знаете порядок исполнения, но вы хотите знать, что будет, если некоторые слушатели объявлены в дескрипторе развертывания, а некоторые - аннотацией, поэтому предпочтение отдается дескриптору развертывания, а затем аннотации.

Обратите внимание, что конструкторы всех слушателей будут вызываться сначала по порядку дескриптора развертывания, а затем по аннотации, а затем по жизненным циклам в том же порядке.