﻿<?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-I love java-文章分类-spring</title><link>http://www.blogjava.net/baizhihui19870626/category/51120.html</link><description>java</description><language>zh-cn</language><lastBuildDate>Sun, 20 May 2012 11:40:56 GMT</lastBuildDate><pubDate>Sun, 20 May 2012 11:40:56 GMT</pubDate><ttl>60</ttl><item><title> ibatis-Spring 整合</title><link>http://www.blogjava.net/baizhihui19870626/articles/378330.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Wed, 16 May 2012 10:21:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/378330.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/378330.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/378330.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/378330.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/378330.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这两天一直在研究ibatis与spring的整合 一个小小的demo搞的我头晕目眩的，但程序一旦跑起来了，突然有一种豁然开朗，重见天日，感觉生活很美好的感觉！，也许，这就是那一行行的代码带给我们的不同享受吧。呵呵，废话就不多说了。在此先引用几句别人的资料。。。Spring通过DAO模式，提供了对iBATIS的良好支持。SqlMapClient对象是iBATIS中的主要对象，我们可以通过配置让spr...&nbsp;&nbsp;<a href='http://www.blogjava.net/baizhihui19870626/articles/378330.html'>阅读全文</a><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/378330.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-05-16 18:21 <a href="http://www.blogjava.net/baizhihui19870626/articles/378330.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>详解Spring中bean的作用域</title><link>http://www.blogjava.net/baizhihui19870626/articles/378270.html</link><dc:creator>小白19870626</dc:creator><author>小白19870626</author><pubDate>Wed, 16 May 2012 03:19:00 GMT</pubDate><guid>http://www.blogjava.net/baizhihui19870626/articles/378270.html</guid><wfw:comment>http://www.blogjava.net/baizhihui19870626/comments/378270.html</wfw:comment><comments>http://www.blogjava.net/baizhihui19870626/articles/378270.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/baizhihui19870626/comments/commentRss/378270.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/baizhihui19870626/services/trackbacks/378270.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="font-family: Simsun; line-height: 24px; background-color: #ffffff; "><p>【引自<a href="http://blog.csdn.net/ProvidenceZY/archive/2007/11/11/1878582.aspx" style="color: #000000; text-decoration: none; ">和时间赛跑!</a>的博客】如何使用spring的作用域：</p><p><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6" style="font-size: 12px; color: #000000; "><pre><p>&lt;bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/&gt;</p></pre></td></tr></tbody></table></p><p>这里的scope就是用来配置spring bean的作用域，它标识bean的作用域。</p><p>在spring2.0之前bean只有2种作用域即：singleton(单例)、non-singleton（也称prototype），Spring2.0以后，增加了session、request、global session三种专用于Web应用程序上下文的Bean。因此，默认情况下Spring2.0现在有五种类型的Bean。当然，Spring2.0对Bean的类型的设计进行了重构，并设计出灵活的Bean类型支持，理论上可以有无数多种类型的Bean，用户可以根据自己的需要，增加新的Bean类型，满足实际应用需求。</p><p><strong>1、singleton作用域</strong></p><p>当一个bean的作用域设置为singleton，那么Spring IOC容器中只会存在一个共享的bean实例，并且所有对bean的请求，只要id与该bean定义相匹配，则只会返回bean的同一实例。换言之，当把一个bean定义设置为singleton作用域时，Spring IOC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存（singleton cache）中，并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例，这里要注意的是singleton作用域和GOF设计模式中的单例是完全不同的，单例设计模式表示一个ClassLoader中只有一个class存在，而这里的singleton则表示一个容器对应一个bean，也就是说当一个bean被标识为singleton时候，spring的IOC容器中只会存在一个该bean。</p><p>配置实例：</p><p><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6" style="font-size: 12px; color: #000000; "><pre><p>&lt;bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/&gt;</p></pre></td></tr></tbody></table></p><p>或者</p><p><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6" style="font-size: 12px; color: #000000; "><pre><p>&lt;bean id="role" class="spring.chapter2.maryGame.Role" singleton="true"/&gt;</p></pre></td></tr></tbody></table></p><p><strong>2、prototype</strong></p><p>prototype作用域部署的bean，每一次请求（将其注入到另一个bean中，或者以程序的方式调用容器的getBean()方法）都会产生一个新的bean实例，相当于一个new的操作，对于prototype作用域的bean，有一点非常重要，那就是Spring不能对一个prototype bean的整个生命周期负责，容器在初始化、配置、装饰或者是装配完一个prototype实例后，将它交给客户端，随后就对该prototype实例不闻不问了。不管何种作用域，容器都会调用所有对象的初始化生命周期回调方法，而对prototype而言，任何配置好的析构生命周期回调方法都将不会被调用。清除prototype作用域的对象并释放任何prototype bean所持有的昂贵资源，都是客户端代码的职责。（让Spring容器释放被singleton作用域bean占用资源的一种可行方式是，通过使用bean的后置处理器，该处理器持有要被清除的bean的引用。）</p><p>配置实例：</p><p><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6" style="font-size: 12px; color: #000000; "><pre><p>&lt;bean id="role" class="spring.chapter2.maryGame.Role" scope="prototype"/&gt;</p></pre></td></tr></tbody></table></p><p>或者</p><p><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6" style="font-size: 12px; color: #000000; "><pre><p>&lt;beanid="role" class="spring.chapter2.maryGame.Role" singleton="false"/&gt;</p></pre></td></tr></tbody></table>&nbsp;<br /><strong>3、request</strong></p><p>request表示该针对每一次HTTP请求都会产生一个新的bean，同时该bean仅在当前HTTP request内有效，配置实例：</p><p>request、session、global session使用的时候，首先要在初始化web的web.xml中做如下配置：</p><p>如果你使用的是Servlet 2.4及以上的web容器，那么你仅需要在web应用的XML声明文件web.xml中增加下述ContextListener即可：</p><p><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6" style="font-size: 12px; color: #000000; "><pre><p>&nbsp;&lt;web-app&gt;<br />&nbsp; ...<br />&nbsp; &lt;listener&gt;<br />&lt;listener-class&gt;org.springframework.web.context.request.RequestContextListener&lt;/listener-class&gt;<br />&nbsp; &lt;/listener&gt;<br />&nbsp; ...<br />&lt;/web-app&gt;</p></pre></td></tr></tbody></table></p><p>如果是Servlet2.4以前的web容器,那么你要使用一个javax.servlet.Filter的实现：</p><p><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6" style="font-size: 12px; color: #000000; "><pre><p>&lt;web-app&gt;<br />&nbsp;..<br />&nbsp;&lt;filter&gt; <br />&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;requestContextFilter&lt;/filter-name&gt; <br />&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;org.springframework.web.filter.RequestContextFilter&lt;/filter-class&gt;<br />&nbsp;&lt;/filter&gt; <br />&nbsp;&lt;filter-mapping&gt; <br />&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;requestContextFilter&lt;/filter-name&gt; <br />&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />&nbsp;&lt;/filter-mapping&gt;<br />&nbsp; ...<br />&lt;/web-app&gt;</p></pre></td></tr></tbody></table></p><p>接着既可以配置bean的作用域了：</p><p><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6" style="font-size: 12px; color: #000000; "><pre><p>&lt;bean id="role" class="spring.chapter2.maryGame.Role" scope="request"/&gt;</p></pre></td></tr></tbody></table></p><p>#p#</p><p><strong>4、session</strong></p><p>session作用域表示该针对每一次HTTP请求都会产生一个新的bean，同时该bean仅在当前HTTP session内有效，配置实例：</p><p>配置实例：</p><p>和request配置实例的前提一样，配置好web启动文件就可以如下配置：</p><p><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6" style="font-size: 12px; color: #000000; "><pre><p>&lt;bean id="role" class="spring.chapter2.maryGame.Role" scope="session"/&gt;</p></pre></td></tr></tbody></table></p><p><strong>5、global session</strong></p><p>global session作用域类似于标准的HTTP Session作用域，不过它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念，它被所有构成某个portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。如果你在web中使用global session作用域来标识bean，那么，web会自动当成session类型来使用。</p><p>配置实例：</p><p>和request配置实例的前提一样，配置好web启动文件就可以如下配置：</p><p><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6" style="font-size: 12px; color: #000000; "><pre><p>&lt;bean id="role" class="spring.chapter2.maryGame.Role" scope="global session"/&gt;</p></pre></td></tr></tbody></table></p><p><strong>6、自定义bean装配作用域</strong></p><p>在spring 2.0中作用域是可以任意扩展的，你可以自定义作用域，甚至你也可以重新定义已有的作用域（但是你不能覆盖singleton和prototype），spring的作用域由接口org.springframework.beans.factory.config.Scope来定义，自定义自己的作用域只要实现该接口即可，下面给个实例：</p><p>我们建立一个线程的scope，该scope在表示一个线程中有效，代码如下：</p><p><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" bgcolor="#e6e6e6" style="font-size: 12px; color: #000000; "><pre><p>publicclass MyScope implements Scope ...{ <br />&nbsp;&nbsp;&nbsp;&nbsp; privatefinal ThreadLocal threadScope = new ThreadLocal() ...{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; protected Object initialValue() ...{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; returnnew HashMap(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp; }; <br />&nbsp;&nbsp;&nbsp;&nbsp; public Object get(String name, ObjectFactory objectFactory) ...{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map scope = (Map) threadScope.get(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object object = scope.get(name); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(object==null) ...{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; object = objectFactory.getObject(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scope.put(name, object); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return object; <br />&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp; public Object remove(String name) ...{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map scope = (Map) threadScope.get(); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return scope.remove(name); <br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp; publicvoid registerDestructionCallback(String name, Runnable callback) ...{ <br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; public String getConversationId() ...{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TODO Auto-generated method stub<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; returnnull;<br />&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p></pre></td></tr></tbody></table></p></span><img src ="http://www.blogjava.net/baizhihui19870626/aggbug/378270.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/baizhihui19870626/" target="_blank">小白19870626</a> 2012-05-16 11:19 <a href="http://www.blogjava.net/baizhihui19870626/articles/378270.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>