﻿<?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-Vincent-随笔分类-Spring</title><link>http://www.blogjava.net/lijiajia418/category/14360.html</link><description>Vicent's blog</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:16:53 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:16:53 GMT</pubDate><ttl>60</ttl><item><title>Spring技巧之简洁配置</title><link>http://www.blogjava.net/lijiajia418/archive/2006/08/22/64972.html</link><dc:creator>Binary</dc:creator><author>Binary</author><pubDate>Tue, 22 Aug 2006 01:56:00 GMT</pubDate><guid>http://www.blogjava.net/lijiajia418/archive/2006/08/22/64972.html</guid><wfw:comment>http://www.blogjava.net/lijiajia418/comments/64972.html</wfw:comment><comments>http://www.blogjava.net/lijiajia418/archive/2006/08/22/64972.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lijiajia418/comments/commentRss/64972.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lijiajia418/services/trackbacks/64972.html</trackback:ping><description><![CDATA[Spring2.0在配置上调整了不少地方，增加更加灵活、简洁的配置方式，本文通过两个简单的示例来演示。<br />      配置Apache的一个数据源连接池，在Spring 2.0以前的版本中，我们可以使用类似下面的配置：<br /><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"><span style="COLOR: #000000">&lt;?</span><span style="COLOR: #000000">xml version</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> encoding</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">UTF-8</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">?&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">&lt;!</span><span style="COLOR: #000000">DOCTYPE beans PUBLIC </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-//SPRING//DTD BEAN//EN</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://www.springframework.org/dtd/spring-beans.dtd</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">beans</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">bean id</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dataSource</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">org.apache.commons.dbcp.BasicDataSource</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />  destroy</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">method</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">close</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">driverClassName</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br />   </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">value</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">org.gjt.mm.mysql.Driver</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">value</span><span style="COLOR: #000000">&gt;&lt;/</span><span style="COLOR: #000000">property</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">url</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br />   </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">value</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">jdbc:mysql:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">127.0.0.1:3306/easyjf-bbs&lt;/value&gt; &lt;/property&gt;</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">  </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">username</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;&lt;</span><span style="COLOR: #000000">value</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">root</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">value</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">property</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">password</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;&lt;</span><span style="COLOR: #000000">value</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">mypass</span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">value</span><span style="COLOR: #000000">&gt;&lt;/</span><span style="COLOR: #000000">property</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /> </span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">bean</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">beans</span><span style="COLOR: #000000">&gt;</span></div> <br />      在Spring2.0中，可以把&lt;value&gt;及&lt;ref&gt;两个标签作为其父级&lt;bean&gt;标签的一个属性来定义，这样使得配置文件更加简洁，如下所示：<br /><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"><span style="COLOR: #000000">&lt;?</span><span style="COLOR: #000000">xml version</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> encoding</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">UTF-8</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">?&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">&lt;!</span><span style="COLOR: #000000">DOCTYPE beans PUBLIC </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-//SPRING//DTD BEAN//EN</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://www.springframework.org/dtd/spring-beans.dtd</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">beans</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">bean id</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dataSource</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">org.apache.commons.dbcp.BasicDataSource</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />  destroy</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">method</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">close</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">driverClassName</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />   value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">org.gjt.mm.mysql.Driver</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">/&gt;</span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">url</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />   value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">jdbc:mysql://127.0.0.1:3306/easyjf-bbs</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">/&gt;</span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">username</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">root</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">/&gt;</span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">password</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">mypass</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">/&gt;</span><span style="COLOR: #000000"><br /> </span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">bean</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">beans</span><span style="COLOR: #000000">&gt;</span></div><br /><br />       另外，Spring2.0中还有一个非常实用的解析器，SimplePropertyNamespaceHandle，若配置文件中引用http: //www.springframework.org/schema/p命令空间，则将会使用 SimplePropertyNamespaceHandle来处理这个Bean的定义，可以在Spring2.0中的Bean中以更简单的方式配置设值方法注入，如下所示：<br /><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"><span style="COLOR: #000000">&lt;?</span><span style="COLOR: #000000">xml version</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> encoding</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">UTF-8</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">?&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">beans xmlns</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://www.springframework.org/schema/beans</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /> xmlns:xsi</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://www.w3.org/2001/XMLSchema-instance</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /> xmlns:p</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://www.springframework.org/schema/p</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /> xsi:schemaLocation</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /><br /></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">bean id</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dataSource</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">org.apache.commons.dbcp.BasicDataSource</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> destroy</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">method</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">close</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />  p:driverClassName</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">org.gjt.mm.mysql.Driver</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br />  p:url</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">jdbc:mysql://127.0.0.1:3306/easyjf-bbs</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> p:username</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">root</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> p:password</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">mysql</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">/&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">beans</span><span style="COLOR: #000000">&gt;</span></div><br /><br />在上面的配置中，使用p:url则可以直接注入BasicDataSource的url属性值，可以使用p:url-ref属性来引用另外一个Bean。<br />    如，Spring2.0以前的一个DAO配置：<br /><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"><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">bean id</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">userDao</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">com.easyjf.bbs.dbo.springjdbc.UserDaoSpringJdbc</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br />       </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dataSource</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;&lt;</span><span style="COLOR: #000000">ref bean</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dataSource</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/&gt;&lt;/</span><span style="COLOR: #000000">property</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br />   </span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">bean</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">  <br />  使用简短属性方式，则改成如下：<br /></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">bean id</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">userDao</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">com.easyjf.bbs.dbo.springjdbc.UserDaoSpringJdbc</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> p:dataSource</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">ref</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dataSource</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">/&gt;</span></div><br /><br />Spring2.0比以前的版本配置更加灵活、简洁，如果手工书写配置，则比较实用。当然，老的配置方式有很多开发工具如MyEclipse等都能识别，不需要我们动手一点一点的录入配置文件，大多数工具对新的配置方式还不能识别，因此，请根据实际情况酌情使用。<img src ="http://www.blogjava.net/lijiajia418/aggbug/64972.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lijiajia418/" target="_blank">Binary</a> 2006-08-22 09:56 <a href="http://www.blogjava.net/lijiajia418/archive/2006/08/22/64972.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring技巧之活用FactoryBean</title><link>http://www.blogjava.net/lijiajia418/archive/2006/08/22/64970.html</link><dc:creator>Binary</dc:creator><author>Binary</author><pubDate>Tue, 22 Aug 2006 01:52:00 GMT</pubDate><guid>http://www.blogjava.net/lijiajia418/archive/2006/08/22/64970.html</guid><wfw:comment>http://www.blogjava.net/lijiajia418/comments/64970.html</wfw:comment><comments>http://www.blogjava.net/lijiajia418/archive/2006/08/22/64970.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lijiajia418/comments/commentRss/64970.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lijiajia418/services/trackbacks/64970.html</trackback:ping><description><![CDATA[
		<a>Spring中有两种类型的Bean，一种是普通Bean，另一种是工厂Bean，即FactoryBean。工厂Bean跟普通Bean不同，其返回的对象不是指定类的一个实例，其返回的是该工厂Bean的getObject方法所返回的对象。在Spring框架内部，AOP相关的功能及事务处理中，很多地方使用到工厂Bean，本文简单分析工厂Bean的用法。<br />首先回顾一下普通Bean，普通的Bean直接返回指定类(配置中的class属性的值)的一个实例，如下面的bean1将返回一个String字符串：<br /><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"><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">bean name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">bean1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">java.lang.String</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /> </span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">constructor</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">arg value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">我是字符串!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">/&gt;</span><span style="COLOR: #000000"><br /> </span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">bean</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> </span></div><br />下面，看看一个简单的工厂Bean：<br /><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"><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.util.Date;<br /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> org.springframework.beans.factory.FactoryBean;<br /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> FactoryBeanDemo </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> FactoryBean {<br /> </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String name;<br /> </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setName(String name)<br /> {<br />  </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">name;<br /> }<br /> </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Object getObject() </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> Exception {<br />  </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">date</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">.equals(name))</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Date();<br />  </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> String(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">这是一个字符串!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /> }<br /> </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Class getObjectType() {  <br />  </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">date</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">.equals(name)</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">Date.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">:String.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">;<br /> }<br /> </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">boolean</span><span style="COLOR: #000000"> isSingleton() {  <br />  </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br /> }<br />}<br /></span></div><br />下面看这个工厂Bean的配置：<br /><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"><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">bean name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">myFactoryBean</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">springroad.deomo.chap4.FactoryBeanDemo</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">bean name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">myFactoryBean1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">springroad.deomo.chap4.FactoryBeanDemo</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;&lt;</span><span style="COLOR: #000000">property name</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">name</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">date</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/&gt;&lt;/</span><span style="COLOR: #000000">bean</span><span style="COLOR: #000000">&gt;</span></div><br />下面是测试代码：<br /><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"><span style="COLOR: #000000">Resource res</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ClassPathResource(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">springroad/deomo/chap4/demo-bean.xml</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />BeanFactory factory</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> XmlBeanFactory(res);<br />System.out.println(factory.getBean(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">myFactoryBean</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).getClass());<br />System.out.println(factory.getBean(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">myFactoryBean1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).getClass());</span></div><br /><br />输出结果：<br /><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"><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> java.lang.String<br /></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> java.util.Date</span></div><br /><br />由此可见，通过使用FactoryBean，我们可以得到不同类型的对象实例。这也就是我们在AOP中通过设置calss为 ProxyFactoryBean可以返回不同类型的业务对象的原理。在实际应用中若能灵活使用FactoryBean，则可以给应用程序增加很多的魔幻功能。<br /><br />一个小窍门：<br />　　FactoryBean还藏有一个技巧，也就是在我们实际需要返回FactoryBean实例时，应该怎么办。也就是我们在应用程序中需要通过容器得到一个FactoryBean。此时，需要使用特殊的方式，即在bean的名称前加上一个特殊符号“&amp;”即可。<br />　　如，下面的代码：<br /><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"><span style="COLOR: #000000">System.out.println(factory.getBean(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&amp;myFactoryBean</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).getClass());<br /> System.out.println(factory.getBean(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&amp;myFactoryBean1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).getClass());</span></div><br />输出的结果将会是：<br /></a>
		<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">
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> springroad.deomo.chap4.FactoryBeanDemo<br /></span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> springroad.deomo.chap4.FactoryBeanDemo </span>
		</div>
<img src ="http://www.blogjava.net/lijiajia418/aggbug/64970.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lijiajia418/" target="_blank">Binary</a> 2006-08-22 09:52 <a href="http://www.blogjava.net/lijiajia418/archive/2006/08/22/64970.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring2.0中新的Bean类型实现原理</title><link>http://www.blogjava.net/lijiajia418/archive/2006/08/22/64968.html</link><dc:creator>Binary</dc:creator><author>Binary</author><pubDate>Tue, 22 Aug 2006 01:49:00 GMT</pubDate><guid>http://www.blogjava.net/lijiajia418/archive/2006/08/22/64968.html</guid><wfw:comment>http://www.blogjava.net/lijiajia418/comments/64968.html</wfw:comment><comments>http://www.blogjava.net/lijiajia418/archive/2006/08/22/64968.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lijiajia418/comments/commentRss/64968.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lijiajia418/services/trackbacks/64968.html</trackback:ping><description><![CDATA[我们知道，在Spring2.0中，除了singleton及prototype两种类型的Bean以外。默认情况下还增加了request、 session及global session三种类型的Bean，增加的三种类型的Bean主要应用于Web应用程序中。本文不打算分析三种类型的 Bean的用法，只是简单分析框架的实现原理。<br />　　Spring2.0中新增了一个用来表示Bean范围的Scope接口<br /><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"><span style="COLOR: #000000">　　</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000"> Scope {<br />　　Object get(String name, ObjectFactory objectFactory);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">根据名称及创建工厂得到一个Bean实例</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">　　Object remove(String name);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">删除一个指定名称的Bean</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">　　}</span></div><br /><br />　　在容器ConfigurableBeanFactory接口中定义了Bean工厂有关Scope注册的相关方法，使得可往Bean工厂中加入新类型的Bean。<br /><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"><span style="COLOR: #000000">　　</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000"> ConfigurableBeanFactory </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> HierarchicalBeanFactory,<br />　　</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> registerScope(String scopeName, Scope scope);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">往Bean工厂中添加一个新的范围(默认只有两种范围：singleton及prototype)</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">　　</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> destroyScopedBean(String beanName);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">销毁B ean工厂中范围Bean</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">　　}</span></div><br /><br />　　在AbstractFactoryBean的getBean方法中实现了对特定Scope Bean支持，核心代码摘要：<br /><br /><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"><span style="COLOR: #000000">    String scopeName </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> mergedBeanDefinition.getScope();</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">取得当前Bean的范围，也即在定义中的scope=”request”的部分。</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    Scope scope </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (Scope) </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.scopes.get(scopeName);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">得到Bean工厂中的范围处理器</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (scope </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">) {<br />     </span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> IllegalStateException(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">No Scope registered for scope '</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> scopeName </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br />    }<br />    </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"> {<br /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">使用scope.get(beanName,ObjectFactory)从指定的范围中得到或创建Bean实例</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">     Object scopedInstance </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> scope.get(beanName, </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ObjectFactory() {<br />      </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Object getObject() </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> BeansException {<br />       beforePrototypeCreation(beanName);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">前拦截</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">       </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"> {<br />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> createBean(beanName, mergedBeanDefinition, args);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">调用子类的createBean实现真正的Bean创建工作</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">       }<br />       </span><span style="COLOR: #0000ff">finally</span><span style="COLOR: #000000"> {<br />        afterPrototypeCreation(beanName);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">后拦截</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">       }<br />      }<br />     });<br />     bean </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> getObjectForBeanInstance(scopedInstance, name, mergedBeanDefinition);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">返回正确类型的Bean实例</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">    }<br />    </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (IllegalStateException ex) {<br />     </span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> BeanCreationException(beanName, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Scope '</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> scopeName </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">' is not active</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, ex);<br />    }</span></div><br /><br />　　默认情况下，低层的Bean工厂中只支持singleton及prototype两种类型的Bean。当把scope设置成request及 session时将会出现不能正确识别Scope的错误。这是因为普通的Bean工厂都没有注册新的Scope。只有在 WebApplicationContext中注册才注册了新类型的Bean。<br />　　下面看实现注册Scope的代码:<br />　　在WebApplicationContext中定义常量<br /><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"><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000"> WebApplicationContext </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> ApplicationContext {<br />　　String SCOPE_REQUEST </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">request</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br />　　String SCOPE_SESSION </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">session</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br />         String SCOPE_GLOBAL_SESSION </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">globalSession</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br />}</span></div><br /><br />　　然后在所有类型的Web应用上下文的实现中，都在Bean工厂的拦载过程中通过postProcessBeanFactory方法来注册新类型 Scope，如GenericWebApplicationContext、StaticWebApplicationContext、 <br /><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"><span style="COLOR: #000000">AbstractRefreshableWebApplicationContext等WebApplication应用上下文实现中。<br />　　</span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {<br />　　  beanFactory.registerScope(SCOPE_REQUEST, </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> RequestScope());</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">注册request类型的Bean</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">　　  beanFactory.registerScope(SCOPE_SESSION, </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> SessionScope(</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">));</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">注册session类型的Bean</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">　　  beanFactory.registerScope(SCOPE_GLOBAL_SESSION, </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> SessionScope(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">));</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">注册glogalsession　　的Bean</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">}</span></div><br /><br />　　结合上面的代码，现在应该明白为什么只有在Web应用上下文中才能使用新增加三种类型的Bean了吧。当然，由于有了Scope，我们也可以非常轻松的实现我们自己的Scope，增加新用户自定义类型的Bean，然后设计出一个适合我们自己的Bean工厂。<img src ="http://www.blogjava.net/lijiajia418/aggbug/64968.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lijiajia418/" target="_blank">Binary</a> 2006-08-22 09:49 <a href="http://www.blogjava.net/lijiajia418/archive/2006/08/22/64968.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>