使用哪一个:OpenSessionInViewInterceptor 或 OpenSessionInViewFilter?

Posted

技术标签:

【中文标题】使用哪一个:OpenSessionInViewInterceptor 或 OpenSessionInViewFilter?【英文标题】:Which one to use: OpenSessionInViewInterceptor or OpenSessionInViewFilter? 【发布时间】:2011-06-12 20:01:50 【问题描述】:

我很难决定使用哪个“在视图中打开会话”:使用 Spring MVC 的拦截器配置 OpenSessionInViewInterceptor 或在 web.xml 的过滤器中配置 OpenSessionInViewFilter?根据我的研究,它们的作用几乎相同,但我试图了解每种类型的区别和用法。

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

谁能分享你对此的看法?你们用的是哪一个?

谢谢。

【问题讨论】:

【参考方案1】:

正如您所说,两者或多或少是等价的。 Spring 提供了它们,因此您可以选择最适合您现有应用程序的一个。

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

但是,如果您不使用 Spring MVC,而仅在业务逻辑级别使用 Spring,那么拦截器就不是一个真正的选择,而过滤器变得更加合适。因为过滤器不是由 Spring 管理的,所以很难将它们配置为与 Spring 集成,但这是权衡。

【讨论】:

谢谢。我相信使用拦截器的一个好处是可以轻松地将 Spring bean 连接到其中,而在使用过滤器时我无法利用该功能。 不要复活旧帖子,但如果您“仅在业务逻辑级别使用 Spring”,使用 @Transactional 并组织代码以使用它不是更有意义吗?我不是在争论,只是不理解 OSIVF 在非 MVC 应用程序中的用处。【参考方案2】:

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

【讨论】:

以上是关于使用哪一个:OpenSessionInViewInterceptor 或 OpenSessionInViewFilter?的主要内容,如果未能解决你的问题,请参考以下文章

使用哪一个:OpenSessionInViewInterceptor 或 OpenSessionInViewFilter?

接口或抽象类:使用哪一个?

Proguard 查询,正在使用哪一个

为啥有两个选项可以在 PySpark 中读取 CSV 文件?我应该使用哪一个?

为啥 Spring Integration 有多个 XML 模式,我应该使用哪一个?

哪一个更适合访问数组?