使用哪一个:OpenSessionInViewInterceptor或OpenSessionInViewFilter?

我很难决定使用哪个“Open Session In View”:使用Spring MVC的拦截器配置OpenSessionInViewInterceptor或在web.xml的filter中配置OpenSessionInViewFilter? 根据我的研究,他们做了几乎相同的事情,但我试图了解每种类型的差异和用法。

两者之间最大的区别是那些不能在web.xml中使用filter的人(比如servlet 2.2及更早版本),他们唯一的选择就是使用OpenSessionInViewInterceptor。 不知何故,我倾向于拦截器只是因为我必须为我的项目创建一个自定义拦截器,所以我想在Spring MVC配置文件中对所有这些“filter”进行分组,而不是在web.xml和我的自定义中使用OpenSessionInViewFilter Spring MVC配置文件中的拦截器。 决定使用哪一个真是一种蹩脚的方式,我的好奇心在这里杀了我。

有人可以分享你对此的看法吗? 你们用哪一个?

谢谢。

如你所说,这两者或多或少是等价的。 Spring为他们提供了两者,以便您可以选择最适合您现有应用程序的那个。

如果您使用Spring MVC,那么使用拦截器是有意义的,因为它更容易配置并更好地与Spring MVC集成。

但是,如果您不使用Spring MVC,并且仅在业务逻辑级别使用Spring,那么拦截器实际上不是一个选项,并且filter变得更合适。 因为filter不是由Spring管理的,所以它们很难配置为与Spring集成,但这是权衡。

如果您有任何不通过spring控制器的请求,即通过自定义servlet的遗留代码,或直接命中的jsp,那么filter将覆盖那些并确保它们包含在会话中。 拦截器不会覆盖那些拦截器,因为Spring DispatcherServlet不会获取这些请求。