Каков жизненный цикл класса, зарегистрированного как ServletContextListener?

Я знаю, что такое ServletContextListener и как его реализовать/зарегистрировать в web.xml.

Но вопрос в следующем. В начале веб-приложения создается один экземпляр прослушивателя для каждой javaVM. Затем вызывается его метод contextInitialized().

В момент закрытия приложения вызывается метод слушателя contextDestroyed(). Но это тот же экземпляр слушателя? Или этот первый экземпляр может быть уничтожен, а новый создан для вызова contextDestroyed()?


person Mikhail    schedule 06.01.2011    source источник
comment
Жизненный цикл существует на протяжении всего времени работы приложения (я так думаю).   -  person Buhake Sindi    schedule 06.01.2011
comment
Я хотел бы увидеть ссылку на доказательство :)   -  person Mikhail    schedule 06.01.2011


Ответы (2)


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

SRV.10.3.3 Регистрация прослушивателя
Веб-контейнер создает экземпляр каждого класса прослушивателя и регистрирует его для уведомлений о событиях до обработки первого запроса приложением.

Из чего следует, что создание экземпляров после обработки первого запроса запрещено.

person kschneid    schedule 06.01.2011
comment
Я только что ударил эту проблему. Явный ответ исходит от docs.oracle.com/cd/B12166_01/web. /B10321_01/filters.htm , раздел Объявление и вызов прослушивателя событий. Цитировать здесь весь абзац слишком долго, суть в том, что все слушатели будут оставаться активными до тех пор, пока не будет обслужен последний запрос для приложения. - person Zólyomi István; 09.05.2013

Как насчет того, чтобы поместить некоторый код как в contextInitialized(), так и в contextDestroyed().

Что-то вроде этого:

System.out.println(this.toString())

Предполагая, что вы не переопределяете метод toString объекта по умолчанию, вы должны увидеть хэш-код объекта в шестнадцатеричном формате (@8104b1), и тем самым вы можете проверить, является ли это одним и тем же объектом.

person Alfredo Osorio    schedule 06.01.2011
comment
Это докажет, что экземпляр одинаков только для некоторого конкретного случая :) - person Mikhail; 06.01.2011