﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-冲上云霄-随笔分类-spring</title><link>http://www.blogjava.net/zhaosoft/category/35647.html</link><description>zhaosoft</description><language>zh-cn</language><lastBuildDate>Mon, 03 Nov 2008 10:55:19 GMT</lastBuildDate><pubDate>Mon, 03 Nov 2008 10:55:19 GMT</pubDate><ttl>60</ttl><item><title>OpenSessionInView理解</title><link>http://www.blogjava.net/zhaosoft/archive/2008/11/02/238145.html</link><dc:creator>zhaosoft</dc:creator><author>zhaosoft</author><pubDate>Sun, 02 Nov 2008 02:28:00 GMT</pubDate><guid>http://www.blogjava.net/zhaosoft/archive/2008/11/02/238145.html</guid><wfw:comment>http://www.blogjava.net/zhaosoft/comments/238145.html</wfw:comment><comments>http://www.blogjava.net/zhaosoft/archive/2008/11/02/238145.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaosoft/comments/commentRss/238145.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaosoft/services/trackbacks/238145.html</trackback:ping><description><![CDATA[<p>在项目里面真正的精华就是web.xml里面的这几行代码：<br />
&lt;filter&gt;<br />
&nbsp;&lt;filter-name&gt;hibernateFilter&lt;/filter-name&gt;<br />
&nbsp;&lt;filter-class&gt;org.springframework.orm.hibernate3.support.OpenSessionInViewFilter&lt;/filter- class&gt;<br />
&lt;/filter&gt;<br />
&lt;filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;hibernateFilter&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;*.do&lt;/url-pattern&gt;<br />
&lt;/filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp; 好啦，一切ok了。接下来的就有spring容器来帮我们做了。有的人也许会问了，你说得也太简单了吧？简单的让我不能相信了。其实不然，越复杂的东西有时候往往就是一句话的事。听我慢慢道来。<br />
&nbsp;&nbsp;&nbsp; 这个属性就是为了支持hibernate的延迟加载而设计的，spring倡导的是面向接口编程，而且在源文件里面大量的使用了Factory-mode 和Singleton-mode。但是这就和hibernate的延迟加载产了冲突。如果不使用hibernate的 OpenSessionInViewFilter过滤器，那么当使用完getHibernateTemplet().save()或者delete()对象以后，spring会自动的关闭session。即使你使用了延迟加载的机能，spring也不会管你那套的。该关的session一刻也不等。当你想延迟加载某些类的某些设置为延迟加载的属性以后，spring就会报出session is close的错误，这该死的spring。为了优化系统的启动速度我才延迟的，为什么你这么不通情达理？不然，使用了 OpenSessionInViewFilter以后，当你save完一个对象以后，因为有这个过滤器，所以spring会把这个连接放到线程池里面，而不是马上就关闭。当需要延迟加载的时候，spring会从线程池里面取出那个session完成加载的动作。当确定这个session确实不再需要的时候，spring才会close掉这个session。原理就是这么简单。我们只需要做的就是在web.xml里面配置那几行代码，其他的就按照我们预期的做，spring会自动帮我们完成我们想要的。</p>
<img src ="http://www.blogjava.net/zhaosoft/aggbug/238145.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaosoft/" target="_blank">zhaosoft</a> 2008-11-02 10:28 <a href="http://www.blogjava.net/zhaosoft/archive/2008/11/02/238145.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>