﻿<?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/renyangok/category/17026.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 07:17:50 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 07:17:50 GMT</pubDate><ttl>60</ttl><item><title>Introducing to Spring Framework</title><link>http://www.blogjava.net/renyangok/archive/2007/02/13/99682.html</link><dc:creator>保尔任</dc:creator><author>保尔任</author><pubDate>Tue, 13 Feb 2007 06:02:00 GMT</pubDate><guid>http://www.blogjava.net/renyangok/archive/2007/02/13/99682.html</guid><wfw:comment>http://www.blogjava.net/renyangok/comments/99682.html</wfw:comment><comments>http://www.blogjava.net/renyangok/archive/2007/02/13/99682.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/renyangok/comments/commentRss/99682.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/renyangok/services/trackbacks/99682.html</trackback:ping><description><![CDATA[
		<p>中文：<a href="http://www.javaeye.com/topic/4919?page=1">http://www.javaeye.com/topic/4919?page=1</a><br />英文：<a href="http://www.theserverside.com/tt/articles/article.tss?l=SpringFramework">http://www.theserverside.com/tt/articles/article.tss?l=SpringFramework</a></p>
<img src ="http://www.blogjava.net/renyangok/aggbug/99682.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/renyangok/" target="_blank">保尔任</a> 2007-02-13 14:02 <a href="http://www.blogjava.net/renyangok/archive/2007/02/13/99682.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring中常见数据源的配置参数</title><link>http://www.blogjava.net/renyangok/archive/2006/12/22/89547.html</link><dc:creator>保尔任</dc:creator><author>保尔任</author><pubDate>Fri, 22 Dec 2006 07:48:00 GMT</pubDate><guid>http://www.blogjava.net/renyangok/archive/2006/12/22/89547.html</guid><wfw:comment>http://www.blogjava.net/renyangok/comments/89547.html</wfw:comment><comments>http://www.blogjava.net/renyangok/archive/2006/12/22/89547.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/renyangok/comments/commentRss/89547.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/renyangok/services/trackbacks/89547.html</trackback:ping><description><![CDATA[ 共分spring容器自带连接池、项目中创建连接池、服务器创建连接池三种<br /><div class="postText"><p>1、spring容器自带连接池</p><p>&lt;bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"&gt;<br />&lt;property name="driverClassName"&gt;<br />&lt;value&gt;com.mysql.jdbc.Driver&lt;/value&gt;<br />&lt;/property&gt;<br />&lt;property name="url"&gt;<br />&lt;value&gt;jdbc:mysql://127.0.0.1:3306/test&lt;/value&gt;<br />&lt;/property&gt;<br />&lt;property name="username"&gt;<br />&lt;value&gt;admin&lt;/value&gt;<br />&lt;/property&gt;<br />&lt;property name="password"&gt;<br />&lt;value/&gt;<br />&lt;/property&gt;<br />&lt;/bean&gt;</p><p>2、项目中创建连接池（一般利用开源项目）</p><p>&lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"&gt;<br />&lt;property name="driverClassName"&gt;<br />&lt;value&gt;com.mysql.jdbc.Driver&lt;/value&gt;<br />&lt;/property&gt;<br />&lt;property name="url"&gt;<br />&lt;value&gt;jdbc:mysql://127.0.0.1:3306/test&lt;/value&gt;<br />&lt;/property&gt;<br />&lt;property name="username"&gt;<br />&lt;value&gt;admin&lt;/value&gt;<br />&lt;/property&gt;<br />&lt;property name="password"&gt;<br />&lt;value/&gt;<br />&lt;/property&gt;<br />&lt;/bean&gt;</p><p>3、应用服务器创建数据源，项目中通过jndi访问，以tomcat为例</p><p>&lt;bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"&gt;<br />&lt;property name="jndiName"&gt;<br />&lt;value&gt;java:comp/env/jdbc/TestDB&lt;/value&gt;<br />&lt;/property&gt;<br />&lt;/bean&gt;</p><p><strong>注意每种容器的jndi写法不同，所以java:comp/env/jdbc/TestDB为其全称，但在配置jndi时可能会是其中一部分，如tomcat配置jdbc/TestDB</strong></p><p><strong>配置错误会报javax.naming.NameNotFoundException: Name jdbc is not bound in this Context异常</strong></p></div><img src ="http://www.blogjava.net/renyangok/aggbug/89547.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/renyangok/" target="_blank">保尔任</a> 2006-12-22 15:48 <a href="http://www.blogjava.net/renyangok/archive/2006/12/22/89547.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring和struts如何集成</title><link>http://www.blogjava.net/renyangok/archive/2006/12/15/88007.html</link><dc:creator>保尔任</dc:creator><author>保尔任</author><pubDate>Fri, 15 Dec 2006 09:32:00 GMT</pubDate><guid>http://www.blogjava.net/renyangok/archive/2006/12/15/88007.html</guid><wfw:comment>http://www.blogjava.net/renyangok/comments/88007.html</wfw:comment><comments>http://www.blogjava.net/renyangok/archive/2006/12/15/88007.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/renyangok/comments/commentRss/88007.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/renyangok/services/trackbacks/88007.html</trackback:ping><description><![CDATA[
		<p>ApplicationContext是Spring的核心，WebApplicationContext继承自ApplicationContext，首先在Web应用中要初始化WebApplicationContext</p>
		<p>，即在web.xml中配置：<br />&lt;listener&gt; <br />&lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt; <br />&lt;/listener&gt; </p>
		<p>&lt;!-- OR USE THE CONTEXTLOADERSERVLET INSTEAD OF THE LISTENER <br />&lt;servlet&gt; <br />&lt;servlet-name&gt;context&lt;/servlet-name&gt; <br />&lt;servlet-class&gt;org.springframework.web.context.ContextLoaderServlet&lt;/servlet-class&gt; <br />&lt;load-on-startup&gt;1&lt;/load-on-startup&gt; <br />&lt;/servlet&gt; <br />--&gt; </p>
		<p>然后对于spring与struts组合的部分，据我所知有三种方法：<br />1、Spring本身也提供了Struts的相关类，主要使用的有org.springframework.web.struts.ActionSupport，我们只要定义BaseAction继承</p>
		<p>AtionSupport，让其他Action继承自BaseAction，就是在BaseAction中调用ActionSupport中getWebApplicationContext()的方法取出</p>
		<p>WebApplicationContext，进而取出各种Service。</p>
		<p>2、让Spring可以反向控制Struts中的action：<br />用org.springframework.web.struts.ContextLoaderPlugIn，这是一个Struts的Plug，在Struts启动时加载，对于Action，可以像管理Bean一</p>
		<p>样来管理，在struts-config.xml中Action的配置变成类似下面的样子 <br />&lt;action attribute="aForm" name="aForm" path="/aAction" scope="request" </p>
		<p>type="org.springframework.web.struts.DelegatingActionProxy"&gt; <br />&lt;forward name="forward" path="forward.jsp" /&gt; <br />&lt;/action&gt; <br />注意type变成了org.springframework.web.struts.DelegatingActionProxy，之后我们需要建立action-servlet.xml（这里只配置action bean</p>
		<p>），action-servlet.xml符合Spring的spring-beans.dtd标准，在里面定义类似下面的 <br />&lt;bean name="/aAction" class="com.web.action.Aaction" singleton="false"&gt; <br />&lt;property name="businessService"&gt; <br />&lt;ref bean="businessService"/&gt; <br />&lt;/property&gt; <br />&lt;/bean&gt; </p>
		<p>com.web.action.Aaction是Action的实现类，businessService是需要的业务逻辑，Spring会把businessService注入到Action中，在Action中</p>
		<p>只要写businessService的get和set方法就可以了，还有一点，action的bean是singleton="false"，即每次新建一个实例，这也解决了Struts</p>
		<p>中Action的线程同步问题，具体过程是当用户做“/aAction”的HTTP请求（当然应该是“/aAction.do”），Struts会找到这个Action的对应类</p>
		<p>org.springframework.web.struts.DelegatingActionProxy，DelegatingActionProxy是个代理类，它会去找action-servlet.xml文件中</p>
		<p>“/aAction”对应的真正实现类，然后把它实例化，同时把需要的业务对象注入，然后执行Action的execute方法。 </p>
		<p>使用了ContextLoaderPlugIn，在struts-config.xml中变成类似这样配置 <br />&lt;plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"&gt; <br />&lt;set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml,/WEB-INF/action-servlet.xml" /&gt; <br />&lt;/plug-in&gt; </p>
		<p>3、JPetstore例子中并没有使用此方法，而使用了第三种方法。同样只需要动Action。如下：</p>
		<p>public abstract class BaseAction extends Action {</p>
		<p>  private PetStoreFacade petStore;</p>
		<p> public void setServlet(ActionServlet actionServlet) {<br />  super.setServlet(actionServlet);<br />  if (actionServlet != null) {<br />   ServletContext servletContext = actionServlet.getServletContext();<br />   WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);<br />   this.petStore = (PetStoreFacade) wac.getBean("petStore");<br />  }<br /> }</p>
		<p> protected PetStoreFacade getPetStore() {<br />  return petStore;<br /> }</p>
		<p>}</p>
<img src ="http://www.blogjava.net/renyangok/aggbug/88007.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/renyangok/" target="_blank">保尔任</a> 2006-12-15 17:32 <a href="http://www.blogjava.net/renyangok/archive/2006/12/15/88007.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring 监听器　IntrospectorCleanupListener简介 </title><link>http://www.blogjava.net/renyangok/archive/2006/12/15/87921.html</link><dc:creator>保尔任</dc:creator><author>保尔任</author><pubDate>Fri, 15 Dec 2006 05:19:00 GMT</pubDate><guid>http://www.blogjava.net/renyangok/archive/2006/12/15/87921.html</guid><wfw:comment>http://www.blogjava.net/renyangok/comments/87921.html</wfw:comment><comments>http://www.blogjava.net/renyangok/archive/2006/12/15/87921.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/renyangok/comments/commentRss/87921.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/renyangok/services/trackbacks/87921.html</trackback:ping><description><![CDATA[
		<p>spring中的提供了一个名为org.springframework.web.util.<font color="#0000ff"><strong>IntrospectorCleanupListener</strong></font>的监听器。它主要负责处理由　<br />JavaBeans  Introspector的使用而引起的<font color="#0000ff"><strong>缓冲泄露</strong></font>。spring中对它的描述如下：<br /> <br />它是一个在web应用关闭的时候,清除<font color="#0000ff"><strong>JavaBeans Introspector</strong></font>的监听器.在web.xml中注册这个listener.<u>可以保证在web 应用关闭的时候释放与掉这个web 应用相关的class loader 和由它管理的类<br /></u> <br />如果你使用了JavaBeans Introspector来分析应用中的类，Introspector 缓冲中会保留这些类的引用.结果在你的应用关闭的时候,这些类以及web 应用相关的class loader没有被垃圾回收.<br /> <br />不幸的是,清除Introspector的唯一方式是刷新整个缓冲.这是因为我们没法判断哪些是属于你的应用的引用.所以删除被缓冲的introspection会导致把这台电脑上的所有应用的introspection都删掉.<br /> <br />需要注意的是,spring 托管的bean不需要使用这个监听器.因为spring它自己的introspection所使用的缓冲在分析完一个类之后会被马上从javaBeans Introspector缓冲中清除掉.<br /> <br />应用程序中的类从来不直接使用JavaBeans Introspector.所以他们一般不会导致内部查看资源泄露.但是一些类库和框架往往会产生这个问题.例如:Struts 和Quartz.<br /> <br />单个的内部查看泄漏会导致整个的web应用的类加载器不能进行垃圾回收.在web应用关闭之后,你会看到此应用的所有静态类资源(例如单例).这个错误当然不是由这个类自身引起的.</p>
		<p>
				<br />这个listener的源代码 : </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">package</span>
				<span style="COLOR: #000000"> org.springframework.web.util;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.beans.Introspector;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> javax.servlet.ServletContextEvent;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> javax.servlet.ServletContextListener;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_234_393_Open_Image" onclick="this.style.display='none'; Codehighlighter1_234_393_Open_Text.style.display='none'; Codehighlighter1_234_393_Closed_Image.style.display='inline'; Codehighlighter1_234_393_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_234_393_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_234_393_Closed_Text.style.display='none'; Codehighlighter1_234_393_Open_Image.style.display='inline'; Codehighlighter1_234_393_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> IntrospectorCleanupListener </span>
				<span style="COLOR: #0000ff">implements</span>
				<span style="COLOR: #000000"> ServletContextListener </span>
				<span id="Codehighlighter1_234_393_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_234_393_Open_Text">
						<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_295_298_Open_Image" onclick="this.style.display='none'; Codehighlighter1_295_298_Open_Text.style.display='none'; Codehighlighter1_295_298_Closed_Image.style.display='inline'; Codehighlighter1_295_298_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_295_298_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_295_298_Closed_Text.style.display='none'; Codehighlighter1_295_298_Open_Image.style.display='inline'; Codehighlighter1_295_298_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> contextInitialized(ServletContextEvent event) </span>
						<span id="Codehighlighter1_295_298_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_295_298_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
								<img id="Codehighlighter1_358_391_Open_Image" onclick="this.style.display='none'; Codehighlighter1_358_391_Open_Text.style.display='none'; Codehighlighter1_358_391_Closed_Image.style.display='inline'; Codehighlighter1_358_391_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_358_391_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_358_391_Closed_Text.style.display='none'; Codehighlighter1_358_391_Open_Image.style.display='inline'; Codehighlighter1_358_391_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> contextDestroyed(ServletContextEvent event) </span>
						<span id="Codehighlighter1_358_391_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_358_391_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Introspector.flushCaches();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
<img src ="http://www.blogjava.net/renyangok/aggbug/87921.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/renyangok/" target="_blank">保尔任</a> 2006-12-15 13:19 <a href="http://www.blogjava.net/renyangok/archive/2006/12/15/87921.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于spring启动的优化</title><link>http://www.blogjava.net/renyangok/archive/2006/12/04/85423.html</link><dc:creator>保尔任</dc:creator><author>保尔任</author><pubDate>Mon, 04 Dec 2006 09:30:00 GMT</pubDate><guid>http://www.blogjava.net/renyangok/archive/2006/12/04/85423.html</guid><wfw:comment>http://www.blogjava.net/renyangok/comments/85423.html</wfw:comment><comments>http://www.blogjava.net/renyangok/archive/2006/12/04/85423.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/renyangok/comments/commentRss/85423.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/renyangok/services/trackbacks/85423.html</trackback:ping><description><![CDATA[ 转自（http://leaf.jdk.cn/default.asp?cateID=4）<br />       <span style="FONT-WEIGHT: bold">jspark</span> 的这篇文章《<a class="postTitle2" id="viewpost1_TitleUrl" href="/jspark/archive/2006/07/29/60712.html">开发阶段eclipse下面的spring容器的启动优化</a> 》讲到如何加快spring的启动速度。非常感谢<span style="FONT-WEIGHT: bold">jspark. </span>一下是引用的原文：<br /><br />  <span style="COLOR: rgb(51,51,153); FONT-STYLE: italic">最近在负责一个大项目，项目组成员包括项目经理大概10个人左右。项目技术用struts+spring+hibernate实现。项目的规模相对来说是比较大的，总共有10大模块，每个大模块又分为有十几个、甚至几十个小模块。开发工具用eclipse，由于在开发阶段，项目开发成员需要频繁重启服务器。在启动服务器的时候，每次启动时间总是会超过1分钟。记得以前在做另外一个项目时，启动时间不到5秒钟，相差了10倍，而且项目规模是差不多的。</span><br style="COLOR: rgb(51,51,153); FONT-STYLE: italic" /><br style="COLOR: rgb(51,51,153); FONT-STYLE: italic" /><span style="COLOR: rgb(51,51,153); FONT-STYLE: italic">    从初步分析来说，应该是hibernate解释hbm.xml时花费时间，或者可能是spring容器启动并解释所有的bean配置文件。诊断了一下，发现1分钟消耗的时间主要分布在hibernate解释hbm.xml花费5秒；spring容器从启动到解释bean配置文件竟然花了58秒，真是太嚣张了。当时非常怀疑spring的效率问题。企图从网上搜索相关资料，看看有什么优化措施。</span><br style="COLOR: rgb(51,51,153); FONT-STYLE: italic" /><br style="COLOR: rgb(51,51,153); FONT-STYLE: italic" /><span style="COLOR: rgb(51,51,153); FONT-STYLE: italic">    首先是找到了hibernate的启动优化 </span><a style="COLOR: rgb(51,51,153); FONT-STYLE: italic" href="http://www.hibernate.org/194.html">http://www.hibernate.org/194.html</a><span style="COLOR: rgb(51,51,153); FONT-STYLE: italic">  里面的主要思想是通过将xml序列花到本地的文件里，每次读取的时候根据情况，从本地文件读取并反序列化，节省了hibernate xml的解析时间。按照这个方式测试了一下，发现hibernate的启动时间从5秒降低到3秒，但是这个优化对于整个启动过程是杯水车薪的，毫无用处。</span><br style="COLOR: rgb(51,51,153); FONT-STYLE: italic" /><br style="COLOR: rgb(51,51,153); FONT-STYLE: italic" /><span style="COLOR: rgb(51,51,153); FONT-STYLE: italic">    没办法，又仔细查看了spring的资料，终于发现spring的容器是提供了lazy-load的，即默认的缺省设置是bean没有lazy- load，该属性处于false状态，这样导致spring在启动过程导致在启动时候，会默认加载整个对象实例图，从初始化ACTION配置、到 service配置到dao配置、乃至到数据库连接、事务等等。这么庞大的规模，难怪spring的启动时间要花将近1分钟。尝试了一下，把beans的 default-lazy-init改为true就，再次启动，速度从原来的55秒，降到8秒钟！！Great！虽然是非常小一个改动，但是影响确实非常大。一个项目组10个人，假若每个人一天平均需要在eclipse下启动测试服务器50次。那么一天项目组需要重启500次，每次节省50秒的话，就是 25000秒，将近几个小时，差不多一个工作日，多么可观的数字！</span><br style="COLOR: rgb(51,51,153); FONT-STYLE: italic" /><br style="COLOR: rgb(51,51,153); FONT-STYLE: italic" /><span style="COLOR: rgb(51,51,153); FONT-STYLE: italic">   不过在运行期间第一次点页面的时候，由于spring做了lazy-load，现在就需要启动一部分需要的beans，所以稍微慢2－3秒钟，但是明显比等几十秒要快很多，值得一鉴。</span><br style="COLOR: rgb(51,51,153); FONT-STYLE: italic" /><br style="COLOR: rgb(51,51,153); FONT-STYLE: italic" /><span style="COLOR: rgb(51,51,153); FONT-STYLE: italic">    以上是针对开发阶段的spring容器启动优化，在部署到实际环境中，倒是没必要设置为lazy-load。毕竟部署到实际环境中不是经常的事，每次启动1分钟倒不是大问题。 </span><br /><br />我这里要提醒的是不是说有的beans都能设置default-lazy-init成为true.对于scheduler的bean不能用lazy-init<br /><br /><div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">beans </span><span style="COLOR: rgb(255,0,0)">default-lazy-init</span><span style="COLOR: rgb(0,0,255)">="true"</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    <br />    </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">bean </span><span style="COLOR: rgb(255,0,0)">class</span><span style="COLOR: rgb(0,0,255)">="org.springframework.scheduling.quartz.SchedulerFactoryBean"</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">property </span><span style="COLOR: rgb(255,0,0)">name</span><span style="COLOR: rgb(0,0,255)">="triggers"</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />            </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">list</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />                </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">ref </span><span style="COLOR: rgb(255,0,0)">bean</span><span style="COLOR: rgb(0,0,255)">="buildHtmlTrigger"</span><span style="COLOR: rgb(0,0,255)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br />                </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">ref </span><span style="COLOR: rgb(255,0,0)">bean</span><span style="COLOR: rgb(0,0,255)">="askTrigger"</span><span style="COLOR: rgb(0,0,255)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br />                </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">ref </span><span style="COLOR: rgb(255,0,0)">bean</span><span style="COLOR: rgb(0,0,255)">="mailSenderTrigger"</span><span style="COLOR: rgb(0,0,255)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br />                </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">ref </span><span style="COLOR: rgb(255,0,0)">bean</span><span style="COLOR: rgb(0,0,255)">="topicDetailBuildTrigger"</span><span style="COLOR: rgb(0,0,255)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br />                </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">ref </span><span style="COLOR: rgb(255,0,0)">bean</span><span style="COLOR: rgb(0,0,255)">="forumBuildTrigger"</span><span style="COLOR: rgb(0,0,255)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br />                </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">ref </span><span style="COLOR: rgb(255,0,0)">bean</span><span style="COLOR: rgb(0,0,255)">="topicBuildTrigger"</span><span style="COLOR: rgb(0,0,255)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br />            </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">list</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">property</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">bean</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">beans</span><span style="COLOR: rgb(0,0,255)">&gt;</span></div><br /><br /><br />这样的话。所有的scheduler就都不管用了。所以请大家要注意。<br /><div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">beans</span><span style="COLOR: rgb(255,0,0)"></span><span style="COLOR: rgb(0,0,255)"></span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    <br />    </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">bean </span><span style="COLOR: rgb(255,0,0)">class</span><span style="COLOR: rgb(0,0,255)">="org.springframework.scheduling.quartz.SchedulerFactoryBean"</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">property </span><span style="COLOR: rgb(255,0,0)">name</span><span style="COLOR: rgb(0,0,255)">="triggers"</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />            </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">list</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />                </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">ref </span><span style="COLOR: rgb(255,0,0)">bean</span><span style="COLOR: rgb(0,0,255)">="buildHtmlTrigger"</span><span style="COLOR: rgb(0,0,255)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br />                </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">ref </span><span style="COLOR: rgb(255,0,0)">bean</span><span style="COLOR: rgb(0,0,255)">="askTrigger"</span><span style="COLOR: rgb(0,0,255)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br />                </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">ref </span><span style="COLOR: rgb(255,0,0)">bean</span><span style="COLOR: rgb(0,0,255)">="mailSenderTrigger"</span><span style="COLOR: rgb(0,0,255)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br />                </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">ref </span><span style="COLOR: rgb(255,0,0)">bean</span><span style="COLOR: rgb(0,0,255)">="topicDetailBuildTrigger"</span><span style="COLOR: rgb(0,0,255)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br />                </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">ref </span><span style="COLOR: rgb(255,0,0)">bean</span><span style="COLOR: rgb(0,0,255)">="forumBuildTrigger"</span><span style="COLOR: rgb(0,0,255)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br />                </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">ref </span><span style="COLOR: rgb(255,0,0)">bean</span><span style="COLOR: rgb(0,0,255)">="topicBuildTrigger"</span><span style="COLOR: rgb(0,0,255)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br />            </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">list</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">property</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">bean</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">beans</span><span style="COLOR: rgb(0,0,255)">&gt;</span></div><img src ="http://www.blogjava.net/renyangok/aggbug/85423.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/renyangok/" target="_blank">保尔任</a> 2006-12-04 17:30 <a href="http://www.blogjava.net/renyangok/archive/2006/12/04/85423.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring/AOP入门（实例）</title><link>http://www.blogjava.net/renyangok/archive/2006/12/04/85424.html</link><dc:creator>保尔任</dc:creator><author>保尔任</author><pubDate>Mon, 04 Dec 2006 09:30:00 GMT</pubDate><guid>http://www.blogjava.net/renyangok/archive/2006/12/04/85424.html</guid><wfw:comment>http://www.blogjava.net/renyangok/comments/85424.html</wfw:comment><comments>http://www.blogjava.net/renyangok/archive/2006/12/04/85424.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/renyangok/comments/commentRss/85424.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/renyangok/services/trackbacks/85424.html</trackback:ping><description><![CDATA[
		<div>
				<p>Spring是一个非常优秀的轻量级框架，通过Spring的IoC容器，我们的关注点便放到了需要实现的业务逻辑上。对AOP的支持则能让我们动态增强业务方法。编写普通的业务逻辑Bean是非常容易而且易于测试的，因为它能脱离J2EE容器（如Servlet，JSP 环境）单独进行单元测试。最后的一步便是在Spring框架中将这些业务Bean以XML配置文件的方式组织起来，它们就按照我们预定的目标正常工作了！非常容易！</p>
				<p>本文将给出一个基本的Spring入门示例，并演示如何使用Spring的AOP将复杂的业务逻辑分离到每个方面中。</p>
				<p>1．开发环境配置<br />2．编写Bean接口及其实现<br />3．在Spring中配置Bean并获得Bean的实例<br />4．编写Advisor以增强ServiceBean<br />5．总结</p>
				<p>原文链接：<br /><a href="http://www.crackj2ee.com/Article/ShowArticle.asp?ArticleID=462">http://www.crackj2ee.com/Article/ShowArticle.asp?ArticleID=462</a></p>
				<p>源码下载：<a href="http://www.crackj2ee.com/Article/UploadFiles/200604/SpringBasic.rar">http://www.crackj2ee.com/Article/UploadFiles/200604/SpringBasic.rar</a></p>
		</div>
<img src ="http://www.blogjava.net/renyangok/aggbug/85424.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/renyangok/" target="_blank">保尔任</a> 2006-12-04 17:30 <a href="http://www.blogjava.net/renyangok/archive/2006/12/04/85424.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring的OpenSessionInView用法</title><link>http://www.blogjava.net/renyangok/archive/2006/12/04/85422.html</link><dc:creator>保尔任</dc:creator><author>保尔任</author><pubDate>Mon, 04 Dec 2006 09:29:00 GMT</pubDate><guid>http://www.blogjava.net/renyangok/archive/2006/12/04/85422.html</guid><wfw:comment>http://www.blogjava.net/renyangok/comments/85422.html</wfw:comment><comments>http://www.blogjava.net/renyangok/archive/2006/12/04/85422.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/renyangok/comments/commentRss/85422.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/renyangok/services/trackbacks/85422.html</trackback:ping><description><![CDATA[
		<p>Spring+Hibernate中，  集合映射如果使用lazy="true"， 当PO传到View层时， 出现未初始化session已关闭的错误，只能在dao先初始化 </p>
		<div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)">
				<span style="COLOR: rgb(0,0,0)">parent.getChilds().size();</span>
		</div>
		<br />Spring提供Open Session In View来解决这个问题, 有两种方式<br />1. Interceptor 
<div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><span style="COLOR: rgb(0,128,0)">    &lt;!--</span><span style="COLOR: rgb(0,128,0)"> =========== OpenSession In View pattern ==============</span><span style="COLOR: rgb(0,128,0)">--&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">bean </span><span style="COLOR: rgb(255,0,0)">id</span><span style="COLOR: rgb(0,0,255)">="openSessionInViewInterceptor"</span><span style="COLOR: rgb(255,0,0)"><br />          class</span><span style="COLOR: rgb(0,0,255)">="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor"</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">property </span><span style="COLOR: rgb(255,0,0)">name</span><span style="COLOR: rgb(0,0,255)">="sessionFactory"</span><span style="COLOR: rgb(255,0,0)"> ref</span><span style="COLOR: rgb(0,0,255)">="sessionFactory"</span><span style="COLOR: rgb(0,0,255)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">bean</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">bean </span><span style="COLOR: rgb(255,0,0)">id</span><span style="COLOR: rgb(0,0,255)">="urlMapping"</span><span style="COLOR: rgb(255,0,0)"> class</span><span style="COLOR: rgb(0,0,255)">="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">property </span><span style="COLOR: rgb(255,0,0)">name</span><span style="COLOR: rgb(0,0,255)">="interceptors"</span><span style="COLOR: rgb(255,0,0)"> ref</span><span style="COLOR: rgb(0,0,255)">="openSessionInViewInterceptor"</span><span style="COLOR: rgb(0,0,255)">/&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">property </span><span style="COLOR: rgb(255,0,0)">name</span><span style="COLOR: rgb(0,0,255)">="mappings"</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />            </span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">props</span><span style="COLOR: rgb(0,0,255)">&gt;<br /></span><span style="COLOR: rgb(0,0,0)">            ......<br />            </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">props</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />        </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">property</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />    </span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">bean</span><span style="COLOR: rgb(0,0,255)">&gt;</span></div>2. Filter 
<div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">web-app</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /> <br /></span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">filter</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">filter-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">hibernateFilter</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">filter-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">filter-class</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br />org.springframework.orm.hibernate.support.OpenSessionInViewFilter<br /></span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">filter-class</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">filter</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /> <br /></span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">filter-mapping</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">filter-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">hibernateFilter</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">filter-name</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;</span><span style="COLOR: rgb(128,0,0)">url-pattern</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)">*.do</span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">url-pattern</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">filter-mapping</span><span style="COLOR: rgb(0,0,255)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br /><br /></span><span style="COLOR: rgb(0,0,255)">&lt;/</span><span style="COLOR: rgb(128,0,0)">web-app</span><span style="COLOR: rgb(0,0,255)">&gt;</span></div><br />说明： 个人更喜欢用Interceptor方式， filter是在web.xml中定义<br />有了OpenSessionInView，并不是一切就ok了。简单的crud可以，但对于复杂业务逻辑就要想点法子。<br /><br />OSIV默认是request per session的, 所以即使没有显式update(po)，Hibernate也会帮你保存的，dao的业务判断就无效，还好有evict()可用。<br />update code 
<div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><span style="COLOR: rgb(0,0,0)">// Controller<br /></span><span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> ModelAndView update() {<br />    p </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> dao.getVo(id);<br />    bindObject(request);<br />    dao.update(p);<br />}<br /><br />// Dao<br /></span><span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> Object getVo(id) {<br />    p </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> getHibernateTemplate().get(clazz, id);<br />    p.getChilds().size();<br />    getHibernateTemplate().evict(p);<br />    </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> p;<br />}<br /><br /></span><span style="COLOR: rgb(0,0,255)">public</span><span style="COLOR: rgb(0,0,0)"> </span><span style="COLOR: rgb(0,0,255)">void</span><span style="COLOR: rgb(0,0,0)"> update(p) {<br />    oldP </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> getVo(id);<br />    </span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)"> ++--(oldP);</span><span style="COLOR: rgb(0,128,0)"><br /></span><span style="COLOR: rgb(0,0,0)">    getHibernateTemplate().update(p);<br />    </span><span style="COLOR: rgb(0,128,0)">//</span><span style="COLOR: rgb(0,128,0)"> ++--(p);</span><span style="COLOR: rgb(0,128,0)"><br /></span><span style="COLOR: rgb(0,0,0)">}</span></div><img src ="http://www.blogjava.net/renyangok/aggbug/85422.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/renyangok/" target="_blank">保尔任</a> 2006-12-04 17:29 <a href="http://www.blogjava.net/renyangok/archive/2006/12/04/85422.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>