Ответ 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 или веб-фрагменте, имеет приоритет над конфигурацией, указанной аннотациями.