2011-01-20 2 views
5

J'ai du mal à décider quelle "Open Session In View" utiliser: configurer OpenSessionInViewInterceptor en utilisant l'intercepteur de Spring MVC avec ou en configurant OpenSessionInViewFilter dans le filtre de web.xml? D'après ce que j'ai recherché, ils font à peu près la même chose, mais j'essaie de comprendre la différence et l'utilisation de chaque type. La plus grande différence entre les deux est pour les gens qui ne peuvent pas utiliser un filtre dans web.xml (disons, servlet 2.2 et plus tôt), leur seule option est d'utiliser OpenSessionInViewInterceptor. D'une certaine manière, je penche vers l'intercepteur simplement parce que je dois créer un intercepteur personnalisé pour mon projet, donc je pense regrouper tous ces "filtres" dans le fichier de configuration Spring MVC plutôt que d'avoir OpenSessionInViewFilter dans web.xml et mon custom intercepteur dans le fichier de configuration Spring MVC. C'est vraiment une façon boiteuse de décider lequel utiliser, et ma curiosité me tue ici.Lequel utiliser: OpenSessionInViewInterceptor ou OpenSessionInViewFilter?

Quelqu'un peut-il partager votre opinion à ce sujet? Lequel utilisez-vous les gars?

Merci.

Répondre

8

Comme vous le dites, les deux sont plus ou moins équivalents. Spring leur fournit les deux afin que vous puissiez choisir celle qui correspond le mieux à votre application existante. Si vous utilisez Spring MVC, il est logique d'utiliser l'intercepteur, car il est plus facile à configurer et s'intègre mieux avec Spring MVC. Cependant, si vous n'utilisez pas Spring MVC et n'utilisez que Spring au niveau de la logique métier, l'intercepteur n'est pas vraiment une option et le filtre devient plus approprié. Parce que les filtres ne sont pas gérés par Spring, ils sont plus difficiles à configurer pour s'intégrer à Spring, mais c'est le compromis.

+0

Merci. Je crois que l'un des avantages de l'utilisation de l'intercepteur est la facilité de brancher les haricots de printemps, alors que je ne peux pas utiliser cette fonction lorsque j'utilise un filtre. – limc

+0

Pour ne pas ressusciter un ancien message, mais si vous "n'utilisez que Spring au niveau de la logique métier", cela n'aurait-il pas plus de sens d'utiliser '@ Transactional' et d'organiser votre code pour qu'il fonctionne avec? Je ne suis pas argumentatif, je ne comprends pas l'utilité d'OSIVF dans les applications non-MVC. – Andy

4

Si vous avez des demandes qui ne vont pas passer par un contrôleur de ressort, par exemple un code hérité qui passe par une servlet personnalisée, ou des jsp qui sont touchés directement, le filtre les couvrira et s'assurera qu'ils sont enveloppés une session. L'intercepteur ne les couvrira pas puisque ces demandes ne seront pas récupérées par le DispatcherServlet du printemps.

+0

Excellent point. – limc

Questions connexes