Spring вызывает метод 'destroy' для bean-объектов в рамках сеанса / запроса - PullRequest
4 голосов
/ 06 февраля 2012

Как Spring узнает, когда вызывать метод 'destory' для bean-объекта в области сеанса / запроса (другими словами, как он обнаруживает, что соответствующий bean-компонент выходит из области видимости)?

Я где-то читал, что он использует прослушиватели запроса / сеанса для уведомления об этих событиях.Но эти списки должны быть определены в web.xml, и нет упоминания об определении таких слушателей в литературе Spring.Так как же это работает?

Ответы [ 3 ]

2 голосов
/ 06 февраля 2012

org.springframework.web.servlet.DispatcherServlet делает это.Для регистрации всех этих bean-объектов bean-компонентов используется собственный код, например, org.springframework.web.context.request.RequestAttributes#registerDestructionCallback список обратных вызовов.

2 голосов
/ 06 февраля 2012

и нет упоминания об определении таких слушателей в весенней литературе

О, есть:

Чтобы поддерживать область действия bean-компонентов на request, session и глобальных уровнях сеанса (bean-объекты scoped), перед определением ваших bean-компонентов требуется небольшая начальная конфигурация. [...]

Если вы используете веб-контейнер Servlet 2.4+, [...] вам необходимо добавить следующий javax.servlet.ServletRequestListener к объявлениям в файле веб-приложений web.xml [...]

От: 4.5.4.1 Начальная веб-конфигурация .

Также обратите внимание, что Spring не вызывает уничтожение на prototype -обобных объектах.

1 голос
/ 05 января 2017

Вы можете реализовать интерфейс DisposableBean и InitializingBean для bean-объекта сессионной области.

Интерфейс org.springframework.beans.factory.InitializingBean позволяет bean-компоненту выполнить инициализацию после того, как все необходимые свойства для bean-компонента были установленыконтейнер.Интерфейс InitializingBean определяет единственный метод afterPropertiesSet().

Реализация интерфейса org.springframework.beans.factory.DisposableBean позволяет компоненту получить обратный вызов, когда контейнер, содержащий его, уничтожен.Интерфейс DisposableBean определяет один метод destroy().

Подробнее об этом здесь: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-factory-nature

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...