關於OpenSessionInViewFilter的配置

OpenSessionInViewFilter是用來處理懶加載異常的。懶加載異常的意思的就是:還用不到的東西,就先不加載,等需要的時候再來加載。

所以懶加載對性能有一定的提升,但是,這也會出現一些問題,一般來說,事務開始的時候Session就被獲取,事務結束的時候Session就會被關閉。所以懶加載會出現Session已關閉,卻還是去調用Session,從而報Session爲空的錯誤。

據我所知道解決這個問題的方法有兩個:一個就是關閉懶加載異常。(一般不推薦!因爲關閉了,就不能使用懶加載的好處了)
另一個方法就是把Session的關閉延後。(推薦使用)

在使用第二種方法解決這個問題時,要先了解一下事務、Session等的調用過程:
如:
圖像 1.png

因爲在顯示層的時候要使用到懶加載屬性,所以要讓Session到顯示層調用了懶加載之後在關閉。


那麼可以把Session的關閉交給Filter或Interceptor,因爲很多程序都要用到這個功能,所以有人已經實現了這個功能。
也就是: org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
只要配置這個Filter就可以了。
如下:

<!-- 防止懶加載異常的過濾器 -->

<filter>

 <filter-name>OpenSessionInViewFilter</filter-name>

 <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>

</filter>

<filter-mapping>

 <filter-name>OpenSessionInViewFilter</filter-name>

 <url-pattern>*.action</url-pattern> 

</filter-mapping>

不過要注意的一件事!

就是這個OpenSessionInViewFilter 過濾器要配置在Struts配置之前。
不然會無效!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章