2011-01-20 2 views
5

Мне сложно определить, какой «Open Session In View» использовать: настроить OpenSessionInViewInterceptor с помощью перехватчика Spring MVC с помощью или настроить OpenSessionInViewFilter в фильтре web.xml? Из того, что я исследовал, они делают почти то же самое, но я пытаюсь понять разницу и использование каждого типа.Какой из них использовать: OpenSessionInViewInterceptor или OpenSessionInViewFilter?

Самое большое различие между ними - это люди, которые не могут использовать фильтр в web.xml (скажем, сервлет 2.2 и более ранние версии), их единственным вариантом является использование OpenSessionInViewInterceptor. Так или иначе, я склоняюсь к перехватчику просто потому, что мне нужно создать пользовательский перехватчик для моего проекта, поэтому я думаю о группировке всех этих «фильтров» в конфигурационном файле Spring MVC, а не в OpenSessionInViewFilter в web.xml и моем обычном перехватчик в конфигурационном файле Spring MVC. Это действительно хромой способ решить, какой из них использовать, и мое любопытство убивает меня здесь.

Разделяете ли вы свои мысли по этому поводу? Какой из них вы используете?

Спасибо.

ответ

8

Как вы говорите, эти два более или менее эквивалентны. Spring предоставляет им оба, чтобы вы могли выбрать тот, который лучше всего подходит для вашего существующего приложения.

Если вы используете Spring MVC, то имеет смысл использовать перехватчик, поскольку его легче настроить и лучше интегрировать с Spring MVC.

Однако, если вы не используете Spring MVC и используете Spring только на уровне бизнес-логики, то перехватчик на самом деле не является опцией, и фильтр становится более подходящим. Поскольку фильтры не управляются Spring, их сложнее настроить для интеграции с Spring, но это компромисс.

+0

Спасибо. Я считаю, что одним из преимуществ использования перехватчика является простота подключения к нему весенних бобах, тогда как я не могу использовать эту функцию при использовании фильтра. – limc

+0

Не воскресить старое сообщение, но если вы используете Spring только на уровне бизнес-логики, «не имеет смысла использовать« @ Transactional »и организовать свой код для работы с ним? Я не являюсь аргументированным, просто не понимая полезности OSIVF в приложениях, отличных от MVC. – Andy

4

Если у вас есть какие-либо запросы, которые не будут проходить через контроллер пружины, то есть код устаревшего кода, который проходит через специальный сервлет, или jsp, которые попадают напрямую, фильтр будет охватывать их и убедиться, что они завернуты в сессии. Перехватчик не будет охватывать те, поскольку эти запросы не будут получены весной DispatcherServlet.

+0

Отличная точка. – limc

Смежные вопросы