`

Spring的OpenSessionInViewFilter和OpenSessionInViewInterceptor

阅读更多
xml 代码

  对Hibernate的懒加载问题,Spring提供了OpenSessionInViewFilter和OpenSessionInViewInterceptor两种东西。

 

  对OpenSessionInViewFilter,需要在web.xml文件中配置。

xml 代码
  1. <filter>  
  2.   <description>处理Hibernate的懒加载问题description>  
  3.   <filter-name>OpenSessionInViewFilterfilter-name>  
  4.   <filter-class>  
  5.     org.springframework.orm.hibernate3.support.OpenSessionInViewFilter   
  6.   filter-class>  
  7.   <init-param>  
  8.     <description>  
  9.        默认情况下,这个Filter会在Spring的bean池中找一个叫做sessionFactory的bean。如果使用了其他名字的SessionFactory,则应该在这里   
  10.        指定这个名字。   
  11.     description>  
  12.     <param-name>sessionFactoryBeanNameparam-name>  
  13.     <param-value>localSessionFactoryparam-value>  
  14.   init-param>  
  15.   <init-param>  
  16.     <description>description>  
  17.     <param-name>singleSessionparam-name>  
  18.     <param-value>trueparam-value>  
  19.   init-param>  
  20. filter>  
  21. <filter-mapping>  
  22.   <filter-name>OpenSessionInViewFilterfilter-name>  
  23.   <url-pattern>*.dourl-pattern>  
  24. filter-mapping>  


         默认情况下,这个Filter会在Spring的bean池中找一个叫做sessionFactory的bean。如果使用了其他名字的SessionFactory,则应该在这里指定这个名字。

xml 代码
  1. <init-param>  
  2.   <description>  
  3.      默认情况下,这个Filter会在Spring的bean池中找一个叫做sessionFactory的bean。如果使用了其他名字的SessionFactory,则应该在这里   
  4.      指定这个名字。   
  5.   </description>  
  6.   <param-name>sessionFactoryBeanName</param-name>  
  7.   <param-value>localSessionFactory</param-value>  
  8. </init-param>  

    其中的sessionFactoryBeanName是你的SessionFactory的实例的名字。这个名字是你在Spring的Bean定义文件中声明的SessionFactory的实例的bean名字。默认这个Filter会使用“sessionFactory”这个值,如果你的SessionFactory确实是这个名字的话,可以不用指明它的名字。但是如果你向我一样,给SessionFactory使用了其他名字,就得在这里声明了。

对OpenSessionInViewInterceptor,就纯粹是Spring IOC容器管理的东西了。

    首先,你需要在Spring中声明一个OpenSessionInViewInterceptor的实例

xml 代码
  1. <bean id="openSessionInViewInterceptor" class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">  
  2.   <property name="sessionFactory" ref="localSessionFactory" />  
  3. </bean>  

    然后,你需要在bean urlMapping 中使用这个interceptor:

java 代码
  1. <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">   
  2.   <property name="interceptors">   
  3.     <list>   
  4.       <ref bean="openSessionInViewInterceptor" />   
  5.     </list>   
  6.   </property>   
  7.   <property name="mappings">   
  8.     <props>   
  9.       <prop key="main.do">mainFrameController</prop>   
  10.     </props>   
  11.   </property>   
  12. </bean>  

 

    在实际应用中,发现一个奇怪的现象,就是使用OpenSessionInViewFilter以后,发现竟然有时候懒加载会出错,因为时间紧迫,还没有找到原因是什么。但是在使用了OpenSessionInViewInterceptor以后,这个问题解决了。

    有空的时候再来看到底是什么原因。

分享到:
评论
5 楼 yuanzhuohang 2012-02-07  
引用
晕啊,首先这个问题要看你用的是什么mvc框架,如果你用的spring mvc 就用openSessionInViewInterceptor,(称为拦截器模式)
如果是用的struts1.x之类的mvc框架,就应该用OpenSessionInViewFilter (过滤器模式)

See also:http://topic.csdn.net/u/20091118/14/08fcce50-7790-4240-a0d1-b46e19b0070b.html
4 楼 poeao 2010-09-19  
zgzd13575java 写道
mainFrameController 指的是什么啊 ..
   菜鸟不懂啊...

OpenSessionInViewFilter和OpenSessionInViewInterceptor 网上一堆

<property name="mappings">   
    <props>   
      <prop key="main.do">mainFrameController</prop>   
    </props>   
</property>
这地方总没讲清楚..
  个个都是老鸟那干嘛发资料上来嘛


这个地方应该是你所要访问的地址当中哪些地址(对应的Action)会用到配置的OpenSessionInViewInterceptor
3 楼 sichen84 2009-04-16  

我没有用springmvc所以用了
OpenSessionInViewFilter,还是出现session关闭问题,不知道怎么解决
2 楼 guoshangming 2008-12-08  
不懂就不要乱发帖,影响搜索引擎! B/S
1 楼 zgzd13575java 2008-11-23  
mainFrameController 指的是什么啊 ..
   菜鸟不懂啊...

OpenSessionInViewFilter和OpenSessionInViewInterceptor 网上一堆

<property name="mappings">   
    <props>   
      <prop key="main.do">mainFrameController</prop>   
    </props>   
</property>
这地方总没讲清楚..
  个个都是老鸟那干嘛发资料上来嘛

相关推荐

    spring面试题大全

    4. 解决OpenSessionInView问题,可以使用OpenSessionInViewFilter或OpenSessionInViewInterceptor,确保在一次HTTP请求中保持Hibernate Session的开放状态,以解决懒加载异常。 Spring的事务管理分为编程式和声明式...

    spring面试大全

    对于OpenSessionInView模式的问题,Spring 提供了OpenSessionInViewFilter或OpenSessionInViewInterceptor来解决。 7. **事务管理**:Spring 提供了两种事务管理方式:编程式和声明式。编程式事务管理使用...

    spring面试题集

    当遇到OpenSessionInView问题时,可以使用OpenSessionInViewFilter或OpenSessionInViewInterceptor来解决。 Spring的事务管理提供了强大且灵活的机制,主要包括编程式和声明式两种方式: 1. 编程式事务管理:通过...

    java-spring面试题大全

    - 解决OpenSessionInView问题,可以使用OpenSessionInViewFilter或OpenSessionInViewInterceptor,确保在HTTP请求的整个生命周期中都保持数据库会话。 5. **Spring的事务管理**: - Spring提供了...

    面试知识点总结--spring面试题大全.pdf

    为解决OpenSessionInView的问题,可以使用OpenSessionInViewFilter或OpenSessionInViewInterceptor,确保在HTTP请求的整个生命周期内保持Hibernate Session的打开状态,以避免数据持久化问题。 Spring的事务管理: ...

    spring面试题

    - **OpenSessionInView**:解决长时间请求导致的事务问题,可通过添加 OpenSessionInViewFilter 或 OpenSessionInViewInterceptor。 5. **Spring 事务管理** - **TransactionDefinition**:定义事务属性,如隔离...

    SPRING API 2.0.CHM

    OpenSessionInViewInterceptor OpenSessionInViewInterceptor OptimisticLockingFailureException OptionsTag OptionTag OptionWriter OracleLobHandler OracleLobHandler.LobCallback ...

    使用Spring引起的错误

    下面分别给出使用OpenSessionInViewInterceptor和OpenSessionInViewFilter的配置示例: ##### OpenSessionInViewInterceptor配置 ```xml &lt;bean id="openSessionInViewInterceptor" class="org.springframework....

    HibernateSpring多数据库解决方案.doc

    此外,Spring的`OpenSessionInViewFilter`或`OpenSessionInViewInterceptor`模式常用于Web应用,它能在HTTP请求的生命周期内保持一个Hibernate Session,以处理跨多个DAO方法的事务。然而,这种模式在多数据库的情况...

    Hibernate事务管理.

    在没有Spring提供的Open Session In View(OSIV)模式下,事务处理和懒加载(lazy loading)可能会遇到挑战。 懒加载是一种优化策略,允许关联对象在需要时才从数据库加载,而不是在初始加载实体时就全部加载。这...

    spring中lazy=“true”的正常读取关联表(用opensessioninview)

    为了解决这个问题,Spring提供了一个过滤器 `OpenSessionInViewFilter` 或者 `OpenSessionInViewInterceptor`,通常简称为OSIV(Open Session In View)模式。 OSIV模式的核心思想是在Controller层和View层之间保持...

    Open_Session_In_View详解.doc

    &lt;bean name="openSessionInViewInterceptor" class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor"&gt; &lt;bean id="urlMapping" class="org.springframework.web.servlet....

Global site tag (gtag.js) - Google Analytics