2011-01-20 9 views
5

Me está costando decidir qué "sesión abierta a la vista" usar: ¿configurar OpenSessionInViewInterceptor utilizando el interceptor de Spring MVC con o configurar OpenSessionInViewFilter en el filtro de web.xml? Por lo que he investigado, hacen casi lo mismo, pero trato de entender la diferencia y el uso de cada tipo.¿Cuál usar: OpenSessionInViewInterceptor u OpenSessionInViewFilter?

La mayor diferencia entre los dos es para las personas que no pueden usar un filtro en web.xml (por ejemplo, servlet 2.2 y versiones anteriores), su única opción es usar OpenSessionInViewInterceptor. De alguna manera, me estoy inclinando hacia el interceptor simplemente porque tengo que crear un interceptor personalizado para mi proyecto, así que estoy pensando en agrupar todos estos "filtros" en el archivo de configuración Spring MVC en lugar de tener OpenSessionInViewFilter en web.xml y mi costumbre interceptor en el archivo de configuración Spring MVC. Realmente es una forma poco convincente de decidir cuál usar, y mi curiosidad me mata aquí.

¿Alguien puede compartir su opinión sobre esto? ¿Cuál usáis?

Gracias.

Respuesta

8

Como dices, los dos son más o menos equivalentes. Spring les proporciona ambos para que pueda elegir el que mejor se adapte a su aplicación existente.

Si usa Spring MVC, entonces tiene sentido usar el interceptor, ya que es más fácil de configurar y se integra mejor con Spring MVC.

Sin embargo, si no utiliza Spring MVC, y solo usa Spring en el nivel de lógica empresarial, entonces el interceptor no es realmente una opción, y el filtro se vuelve más apropiado. Debido a que los filtros no son administrados por Spring, son más difíciles de configurar para integrarse con Spring, pero ese es el equilibrio.

+0

Gracias. Creo que uno de los beneficios del uso de interceptor es la facilidad de cableado de los granos de primavera, mientras que no puedo utilizar esa característica cuando se utiliza un filtro. – limc

+0

No para resucitar una publicación anterior, pero si "solo usa Spring en el nivel lógico de la empresa", ¿no tendría más sentido usar '@ Transactional' y organizar el código para que funcione? No estoy discutiendo, simplemente no estoy entendiendo la utilidad de 'OSIVF' en aplicaciones que no son de MVC. – Andy

4

Si tiene alguna solicitud que no va a pasar por un controlador de primavera, es decir, un código heredado que pasa por un servlet personalizado o jsp que se activan directamente, entonces el filtro cubrirá esos y se asegurará de que se envuelven en una sesión. El interceptor no cubrirá estos ya que esas solicitudes no serán recogidas por Spring DispatcherServlet.

+0

Excelente punto. – limc