2011-01-20 16 views
5

Trudno mi zdecydować, z której "otwartej sesji w widoku" korzystać: konfigurując OpenSessionInViewInterceptor używając przechwytywacza Spring MVC z lub konfigurując OpenSessionInViewFilter w filtrze web.xml? Z tego, co badałem, robią prawie to samo, ale staram się zrozumieć różnicę i użycie każdego rodzaju.Który użyć: OpenSessionInViewInterceptor lub OpenSessionInViewFilter?

Największa różnica między nimi jest dla osób, które nie mogą używać filtra w web.xml (powiedzmy, servlet 2.2 i wcześniejsze), ich jedyną opcją jest użycie OpenSessionInViewInterceptor. Jakoś pochylam się do przechwytywacza tylko dlatego, że muszę stworzyć niestandardowy przechwytywacz dla mojego projektu, więc myślę o zgrupowaniu wszystkich tych "filtrów" w pliku konfiguracyjnym Spring MVC zamiast o OpenSessionInViewFilter w web.xml i moim niestandardowym przechwytywacz w pliku konfiguracyjnym Spring MVC. To naprawdę kiepski sposób, aby zdecydować, którego użyć, a moja ciekawość mnie tutaj zabije.

Czy ktoś może podzielić się swoimi przemyśleniami na ten temat? Którego używasz?

Dzięki.

Odpowiedz

8

Tak jak mówisz, te dwie są mniej więcej równoważne. Wiosna zapewnia je obu, dzięki czemu można wybrać ten, który najlepiej pasuje do istniejącej aplikacji.

Jeśli używasz Spring MVC, to sensowne jest użycie przechwytywacza, ponieważ jest on łatwiejszy w konfiguracji i lepszej integracji ze Spring MVC.

Jeśli jednak nie używasz Spring MVC i używasz Spring tylko na poziomie logiki biznesowej, to przechwytywacz nie jest tak naprawdę opcją, a filtr staje się bardziej odpowiedni. Ponieważ filtry nie są zarządzane przez Spring, są trudniejsze do skonfigurowania w celu integracji ze Spring, ale to jest kompromis.

+0

Dzięki. Wierzę, że jedną z zalet używania przechwytywacza jest łatwość podłączania do niego fasoli Spring, podczas gdy nie mogę wykorzystać tej funkcji podczas korzystania z filtra. – limc

+0

Nie wskrzeszać starego postu, ale jeśli "używasz Spring tylko na poziomie logiki biznesowej", czy nie byłoby sensu używać '@ Transactional' i organizować swój kod do pracy z nim? Nie jestem kłótliwy, tylko nie rozumiem przydatności "OSIVF" w aplikacjach innych niż MVC. – Andy

4

Jeśli masz jakieś żądania, które nie będą przechodzić przez kontroler wiosenny, tj. Dotychczasowy kod, który przechodzi przez niestandardowy serwlet, lub jsp, które są trafione bezpośrednio, to filtr obejmie je i upewni się, że są zapakowane Sesja. Przechwytywacz nie pokryje tych, ponieważ te żądania nie zostaną odebrane przez serwer DispatcherServlet.

+0

Doskonały punkt. – limc