【问题标题】:Which one to use: OpenSessionInViewInterceptor or OpenSessionInViewFilter?使用哪一个:OpenSessionInViewInterceptor 或 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 配置文件中的拦截器。决定使用哪一个确实是一种蹩脚的方式,我的好奇心在这里杀死了我。

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

谢谢。

【问题讨论】:

    标签: java hibernate spring-mvc servlet-filters interceptor


    【解决方案1】:

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

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

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

    【讨论】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-04
      • 2010-09-30
      • 2015-12-03
      • 2023-04-07
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多