<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://dengyin2000.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2fdengyin2000.spaces.live.com%2fcategory%2fSpring%2bFramework%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Java Dreams: Spring Framework</title><description /><link>http://dengyin2000.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&amp;_c=BlogPart&amp;partqs=catSpring%2bFramework</link><language>en-US</language><pubDate>Sat, 02 Aug 2008 01:08:53 GMT</pubDate><lastBuildDate>Sat, 02 Aug 2008 01:08:53 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><cf:parentRSS>http://dengyin2000.spaces.live.com/blog/feed.rss</cf:parentRSS><live:type>blogcategory</live:type><live:identity><live:id>-5815636772130029849</live:id><live:alias>dengyin2000</live:alias></live:identity><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>Spring之事务管理</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!188.entry</link><description>&lt;p align=center&gt;&lt;font face="宋体, SimSun"&gt;Spring&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;之事务管理&lt;/span&gt;&lt;/font&gt;
&lt;p&gt;&lt;font face="宋体, SimSun"&gt;	EJB&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;被人骂的够多了，除了&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;SLSB(&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;无状态&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;Session
Bean)&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;，&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;CMT(Container-Managed
Transaction&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;，
容器管理事务&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;)&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;外，但是&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;CMT&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;依然需要以来&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;Application
Server&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;。&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;Spring&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;提供了比&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;CMT&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;更加轻量的，好用易用的事务管理。&lt;/span&gt;&lt;/font&gt;
&lt;p&gt;&lt;font face="宋体, SimSun"&gt;	org.springframework.transaction.
PlatformTransactionManager&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;：是&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;Spring&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;事务管理的核心接口，正如类名，他分离了平台独立性。配合&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;Spring&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;的&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;bean
definition&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;，他可以让我们在不同的事务平台上切换（&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;jta-&amp;gt;jdbc,
etc&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;）。&lt;/span&gt;&lt;/font&gt;
&lt;p&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;b&gt;&lt;font color="#7f0055"&gt;package &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;org.springframework.transaction;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;b&gt;&lt;font color="#7f0055"&gt;public interface &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;PlatformTransactionManager {&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;  &lt;/font&gt;&lt;font color="#000000"&gt;TransactionStatus getTransaction(TransactionDefinition definition)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;      &lt;/font&gt;&lt;b&gt;&lt;font color="#7f0055"&gt;throws &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;TransactionException;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;  &lt;/font&gt;&lt;b&gt;&lt;font color="#7f0055"&gt;void &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;commit(TransactionStatus status) &lt;/font&gt;&lt;b&gt;&lt;font color="#7f0055"&gt;throws &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;TransactionException;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;  &lt;/font&gt;&lt;b&gt;&lt;font color="#7f0055"&gt;void &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;rollback(TransactionStatus status) &lt;/font&gt;&lt;b&gt;&lt;font color="#7f0055"&gt;throws &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;TransactionException;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;
&lt;/font&gt;

&lt;p&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font color="#000000"&gt;PlatformTransactionManager&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font color="#000000"&gt;接口只有三个方法。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font color="#000000"&gt;Spring&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font color="#000000"&gt;中使用&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font color="#000000"&gt;AOP&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font color="#000000"&gt;配合&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font color="#000000"&gt;PlatformTransactionManager&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font color="#000000"&gt;，可以使你感觉不到这个接口和他所依赖的类的存在。你需要做的只是在&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font color="#000000"&gt;bean
definition&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font color="#000000"&gt;中做写配置。你的代码不需要写一行关于事务的代码&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font color="#000000"&gt;特殊情况除外，如果你想在代码中控制事务的&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font color="#000000"&gt;commit&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font color="#000000"&gt;或&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font color="#000000"&gt;rollback)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font color="#000000"&gt;。当然你也可以使用编程式事务处理&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font color="#000000"&gt;这里不做介绍，可以参数&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font color="#000000"&gt;Spring
document)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font color="#000000"&gt;。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;
&lt;p&gt;&lt;br&gt;

&lt;p&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;b&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font color="#000000"&gt;申明式事务管理&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;
&lt;p&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;一种是使用&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;AOP
ProxyFactoryBean &lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;和
&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;TransactionInterceptor&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;。&lt;/span&gt;&lt;/font&gt;
&lt;p align=left&gt;&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;beans&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;   
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;...&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;
&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&amp;lt;bean
id=&amp;quot;myTxManager&amp;quot;
class=&amp;quot;org.springframework.orm.hibernate.HibernateTransactionManager&amp;quot;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;   
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;property
name=&amp;quot;sessionFactory&amp;quot; ref=&amp;quot;mySessionFactory&amp;quot;/&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt; 
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;/bean&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;
 &lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;bean
id=&amp;quot;myTxInterceptor&amp;quot;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;     
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;class=&amp;quot;org.springframework.transaction.interceptor.TransactionInterceptor&amp;quot;&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;   
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;property
name=&amp;quot;transactionManager&amp;quot; ref=&amp;quot;myTxManager&amp;quot;/&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;&lt;font face="Courier New, monospace"&gt;		&amp;lt;property
name=&amp;quot;transactionAttributes&amp;quot;&amp;gt;&lt;/font&gt;
&lt;p align=left&gt;&lt;font face="Courier New, monospace"&gt;			&amp;lt;props&amp;gt;&lt;/font&gt;
&lt;p align=left&gt;&lt;font face="Courier New, monospace"&gt;				&amp;lt;prop
key=&amp;quot;store*&amp;quot;&amp;gt;PROPAGATION_REQUIRED&amp;lt;/prop&amp;gt;&lt;/font&gt;
&lt;p align=left&gt;&lt;font face="Courier New, monospace"&gt;				&amp;lt;prop
key=&amp;quot;create*&amp;quot;&amp;gt;PROPAGATION_REQUIRED&amp;lt;/prop&amp;gt;&lt;/font&gt;
&lt;p align=left&gt;&lt;font face="Courier New, monospace"&gt;				&amp;lt;prop
key=&amp;quot;put*&amp;quot;&amp;gt;PROPAGATION_REQUIRED&amp;lt;/prop&amp;gt;											&lt;/font&gt;
&lt;p align=left&gt;&lt;font face="Courier New, monospace"&gt;				&amp;lt;prop
key=&amp;quot;*&amp;quot;&amp;gt;PROPAGATION_REQUIRED,readOnly&amp;lt;/prop&amp;gt;&lt;/font&gt;
&lt;p align=left&gt;&lt;font face="Courier New, monospace"&gt;			&amp;lt;/props&amp;gt;&lt;/font&gt;
&lt;p align=left&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;	&amp;lt;/property&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt; 
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;/bean&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt; 
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;bean
id=&amp;quot;myProductServiceTarget&amp;quot;
class=&amp;quot;product.ProductServiceImpl&amp;quot;&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;   
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;property
name=&amp;quot;productDao&amp;quot; ref=&amp;quot;myProductDao&amp;quot;/&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt; 
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;/bean&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt; 
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;bean
id=&amp;quot;myProductService&amp;quot;
class=&amp;quot;org.springframework.aop.framework.ProxyFactoryBean&amp;quot;&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;   
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;property
name=&amp;quot;proxyInterfaces&amp;quot;&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;     
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;value&amp;gt;product.ProductService&amp;lt;/value&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;/property&amp;gt;							&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;property
name=&amp;quot;target&amp;quot; ref=&amp;quot;myProductServiceTarget&amp;quot;/&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;   
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;property
name=&amp;quot;interceptorNames&amp;quot;&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;     
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;list&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;     
  &lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&amp;lt;value&amp;gt;myTxInterceptor&amp;lt;/value&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;     
  &lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;value&amp;gt;&amp;lt;!—add
more interceptors here --&amp;gt;&amp;lt;/value&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;     
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;/list&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;   
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;/property&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt; 
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;/bean&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;/beans&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;这种配置更加灵活，
你可以加更多的&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;interceptor
&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;到&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;ProductService&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;中，
如&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;securityInterceptor.&lt;/font&gt;
&lt;p&gt;&lt;br&gt;

&lt;p&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;二使用易用的，便利的&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;TransactionProxyFactoryBean&lt;/font&gt;
&lt;p align=left&gt;&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;beans&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;...&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;
&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&amp;lt;bean
id=&amp;quot;myTxManager&amp;quot;
class=&amp;quot;org.springframework.orm.hibernate.HibernateTransactionManager&amp;quot;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;   
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;property
name=&amp;quot;sessionFactory&amp;quot; ref=&amp;quot;mySessionFactory&amp;quot;/&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt; 
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;/bean&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt; 
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;bean
id=&amp;quot;myProductServiceTarget&amp;quot;
class=&amp;quot;product.ProductServiceImpl&amp;quot;&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;   
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;property
name=&amp;quot;productDao&amp;quot; ref=&amp;quot;myProductDao&amp;quot;/&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt; 
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;/bean&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;
&lt;font face="Courier New, monospace"&gt;&amp;lt;bean id=&amp;quot;myProductService&amp;quot;
class=&amp;quot;org.springframework.transaction.interceptor.TransactionProxyFactoryBean&amp;quot;&amp;gt;&lt;/font&gt;
&lt;p align=left&gt;&lt;font face="Courier New, monospace"&gt;		&amp;lt;property
name=&amp;quot;transactionManager&amp;quot; ref=&amp;quot;myTxManager&amp;quot;/&amp;gt;&lt;/font&gt;
&lt;p align=left&gt;&lt;font face="Courier New, monospace"&gt;		&amp;lt;property
name=&amp;quot;target&amp;quot; ref=&amp;quot;myProductServiceTarget&amp;quot;/&amp;gt;&lt;/font&gt;
&lt;p align=left&gt;&lt;font face="Courier New, monospace"&gt;		&amp;lt;property
name=&amp;quot;transactionAttributes&amp;quot;&amp;gt;&lt;/font&gt;
&lt;p align=left&gt;&lt;font face="Courier New, monospace"&gt;			&amp;lt;props&amp;gt;&lt;/font&gt;
&lt;p align=left&gt;&lt;font face="Courier New, monospace"&gt;				&amp;lt;prop
key=&amp;quot;store*&amp;quot;&amp;gt;PROPAGATION_REQUIRED&amp;lt;/prop&amp;gt;&lt;/font&gt;
&lt;p align=left&gt;&lt;font face="Courier New, monospace"&gt;				&amp;lt;prop
key=&amp;quot;create*&amp;quot;&amp;gt;PROPAGATION_REQUIRED&amp;lt;/prop&amp;gt;&lt;/font&gt;
&lt;p align=left&gt;&lt;font face="Courier New, monospace"&gt;				&amp;lt;prop
key=&amp;quot;put*&amp;quot;&amp;gt;PROPAGATION_REQUIRED&amp;lt;/prop&amp;gt;											&lt;/font&gt;
&lt;p align=left&gt;&lt;font face="Courier New, monospace"&gt;				&amp;lt;prop
key=&amp;quot;*&amp;quot;&amp;gt;PROPAGATION_REQUIRED,readOnly&amp;lt;/prop&amp;gt;&lt;/font&gt;
&lt;p align=left&gt;&lt;font face="Courier New, monospace"&gt;			&amp;lt;/props&amp;gt;&lt;/font&gt;
&lt;p align=left&gt;&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;	&amp;lt;/property&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;
&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;/bean&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p align=left&gt;&lt;font face="Courier New, monospace"&gt;&lt;font style="font-size:10pt" size=2&gt;&amp;lt;/beans&amp;gt;&lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;相比上面的代码，
现在的代码少多了。我觉得&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;Spring&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;的类层次设计的非常合理，你可以使用其中的几个接口合并成另外一些大接口。如：
&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;Resource
BeanFactory&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;。&lt;/span&gt;&lt;/font&gt;
&lt;p&gt;http://www.writely.com/View.aspx?docid=bdd75sqmr39x8
&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+Spring%e4%b9%8b%e4%ba%8b%e5%8a%a1%e7%ae%a1%e7%90%86&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!188.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!188.entry</guid><pubDate>Sat, 15 Apr 2006 14:38:50 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!188/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!188.entry#comment</wfw:comment><dcterms:modified>2006-04-15T14:38:50Z</dcterms:modified></item><item><title>Spring之FactoryBean（工厂Bean）</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!187.entry</link><description>&lt;p align=center&gt;&lt;font face="宋体, SimSun"&gt;Spring&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;之&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;FactoryBean&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;（工厂&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;Bean&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;）&lt;/span&gt;&lt;/font&gt;
&lt;p&gt;&lt;font face="宋体, SimSun"&gt;	org.springframework.beans.factory.FactoryBean&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;是一个接口，是&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;Spring&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;中用于定义自定义服务的核心接口，他本身是在&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;bean&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;工厂中定义的一个&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;bean&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;，同时又是用于创建另一个&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;Spring&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;服务对象的工厂。&lt;/span&gt;&lt;/font&gt;
&lt;p&gt;&lt;font face="宋体, SimSun"&gt;&lt;b&gt;FactoryBean.java&lt;/b&gt;&lt;/font&gt;
&lt;p&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;b&gt;&lt;font color="#7f0055"&gt;package &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;org.springframework.beans.factory;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;b&gt;&lt;font color="#7f0055"&gt;public interface &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;FactoryBean {&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;  &lt;/font&gt;&lt;font color="#3f5fbf"&gt;/**&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;   &lt;/font&gt;&lt;font color="#3f5fbf"&gt;* Return an instance (possibly shared or independent) of the object&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;   &lt;/font&gt;&lt;font color="#3f5fbf"&gt;* managed by this factory. As with a BeanFactory, this allows&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;   &lt;/font&gt;&lt;font color="#3f5fbf"&gt;* support for both the Singleton and Prototype design pattern.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;   &lt;/font&gt;&lt;font color="#3f5fbf"&gt;* &lt;/font&gt;&lt;font color="#7f7f9f"&gt;&amp;lt;p&amp;gt;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;If this method returns null, the factory will consider the&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;   &lt;/font&gt;&lt;font color="#3f5fbf"&gt;* FactoryBean as not fully initialized and throw a corresponding&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;   &lt;/font&gt;&lt;font color="#3f5fbf"&gt;* FactoryBeanNotInitializedException.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;   &lt;/font&gt;&lt;font color="#3f5fbf"&gt;* &lt;/font&gt;&lt;font color="#7f9fbf"&gt;@return &lt;/font&gt;&lt;font color="#3f5fbf"&gt;an instance of the bean (should not be &lt;/font&gt;&lt;font color="#7f7f9f"&gt;&amp;lt;code&amp;gt;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;null&lt;/font&gt;&lt;font color="#7f7f9f"&gt;&amp;lt;/code&amp;gt;&lt;/font&gt;&lt;font color="#3f5fbf"&gt;; a null value&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;   &lt;/font&gt;&lt;font color="#3f5fbf"&gt;* will be considered as an indication of incomplete initialization)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;   &lt;/font&gt;&lt;font color="#3f5fbf"&gt;* &lt;/font&gt;&lt;font color="#7f9fbf"&gt;@throws &lt;/font&gt;&lt;font color="#3f5fbf"&gt;Exception in case of creation errors&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;   &lt;/font&gt;&lt;font color="#3f5fbf"&gt;* &lt;/font&gt;&lt;font color="#7f9fbf"&gt;@see &lt;/font&gt;&lt;font color="#3f5fbf"&gt;FactoryBeanNotInitializedException&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;   &lt;/font&gt;&lt;font color="#3f5fbf"&gt;*/&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;  &lt;/font&gt;&lt;font color="#000000"&gt;Object getObject() &lt;/font&gt;&lt;b&gt;&lt;font color="#7f0055"&gt;throws &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;Exception;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;  &lt;/font&gt;&lt;font color="#000000"&gt;Class getObjectType();&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;  &lt;/font&gt;&lt;b&gt;&lt;font color="#7f0055"&gt;boolean &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;isSingleton();&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;
&lt;/font&gt;

&lt;p&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;下面是&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;FactoryBean&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;的&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;getObject&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;方法的调用层次。&lt;/span&gt;&lt;/font&gt;
&lt;p&gt;&lt;img src="http://www.writely.com/File.aspx?id=bdd75scdqc996" align=bottom border=0 height=195 width=1364&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;我们可以看出，当我们用&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;BeanFactory&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;或&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;ApplicationContext&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;去那&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;getBean()&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;时，如果这个&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;Bean&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;是被一个&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;BeanFactory&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;，那么&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;BeanFactory&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;得到的会是&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;FactoryBean.getObject()&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;的对象。&lt;/span&gt;&lt;/font&gt;
&lt;p&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;下面是&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;AbstractBeanFactory&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;的&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;getObjectForSharedInstance(String,
Object)&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;方法。&lt;/span&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#3f7f5f"&gt;// Now we have the bean instance, which may be a normal bean or a FactoryBean.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#3f7f5f"&gt;// If it's a FactoryBean, we use it to create a bean instance, unless the&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#3f7f5f"&gt;// caller actually wants a reference to the factory.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;b&gt;&lt;font color="#7f0055"&gt;if &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;(beanInstance &lt;/font&gt;&lt;b&gt;&lt;font color="#7f0055"&gt;instanceof &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;FactoryBean) {&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;      &lt;/font&gt;&lt;b&gt;&lt;font color="#7f0055"&gt;if &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;(!isFactoryDereference(name)) {&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;        &lt;/font&gt;&lt;font color="#3f7f5f"&gt;// Return bean instance from factory.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;        &lt;/font&gt;&lt;b&gt;&lt;font color="#000000"&gt;FactoryBean factory = (FactoryBean) beanInstance;
   //Cast to
FactoryBean.&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;        &lt;/font&gt;&lt;b&gt;&lt;font color="#7f0055"&gt;if &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;(logger.isDebugEnabled()) {&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;          &lt;/font&gt;&lt;font color="#000000"&gt;logger.debug(&lt;/font&gt;&lt;font color="#2a00ff"&gt;&amp;quot;Bean with name '&amp;quot; &lt;/font&gt;&lt;font color="#000000"&gt;+ beanName + &lt;/font&gt;&lt;font color="#2a00ff"&gt;&amp;quot;' is a factory bean&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;);&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;        &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;        &lt;/font&gt;&lt;b&gt;&lt;font color="#7f0055"&gt;try &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;         &lt;b&gt; &lt;/b&gt;&lt;/font&gt;&lt;b&gt;&lt;font color="#000000"&gt;beanInstance = factory.getObject();
 // Get the real
Object&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;        &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;        &lt;/font&gt;&lt;b&gt;&lt;font color="#7f0055"&gt;catch &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;(Exception ex) {&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;          &lt;/font&gt;&lt;b&gt;&lt;font color="#7f0055"&gt;throw new &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;BeanCreationException(beanName, &lt;/font&gt;&lt;font color="#2a00ff"&gt;&amp;quot;FactoryBean threw exception on object creation&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;, ex);&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;        &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;        &lt;/font&gt;&lt;b&gt;&lt;font color="#7f0055"&gt;if &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;(beanInstance == &lt;/font&gt;&lt;b&gt;&lt;font color="#7f0055"&gt;null&lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;) {&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;          &lt;/font&gt;&lt;b&gt;&lt;font color="#7f0055"&gt;throw new &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;FactoryBeanNotInitializedException(&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;              &lt;/font&gt;&lt;font color="#000000"&gt;beanName, &lt;/font&gt;&lt;font color="#2a00ff"&gt;&amp;quot;FactoryBean returned null object: &amp;quot; &lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;              &lt;/font&gt;&lt;font color="#2a00ff"&gt;&amp;quot;probably not fully initialized (maybe due to circular bean reference)&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;);&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;        &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;      &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;      &lt;/font&gt;&lt;b&gt;&lt;font color="#7f0055"&gt;else &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;         &lt;/font&gt;&lt;font color="#3f7f5f"&gt;// The user wants the factory itself.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;        &lt;/font&gt;&lt;b&gt;&lt;font color="#7f0055"&gt;if &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;(logger.isDebugEnabled()) {&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;          &lt;/font&gt;&lt;font color="#000000"&gt;logger.debug(&lt;/font&gt;&lt;font color="#2a00ff"&gt;&amp;quot;Calling code asked for FactoryBean instance for name '&amp;quot; &lt;/font&gt;&lt;font color="#000000"&gt;+ beanName + &lt;/font&gt;&lt;font color="#2a00ff"&gt;&amp;quot;'&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;);&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;        &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;      &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New, monospace"&gt;&lt;br&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;font size=3&gt;&lt;font style="font-size:10pt" size=2&gt;&lt;font face="Courier New, monospace"&gt;&lt;font color="#ffffff"&gt;    &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font face="宋体, SimSun"&gt;Spring
&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;通过&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;FactoryBean&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;来提供内置的许多有用的核心服务。当然你也可以实现自己的&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;FactoryBean&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;，但是你大不可以不必这样做，&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;Spring&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;已经提供了大量的。&lt;/span&gt;&lt;/font&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;font face="宋体, SimSun"&gt;org.springframework.jndi
	JndiObjectFactoryBean&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;：&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;JNDI
	LookUp&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;。&lt;/span&gt;&lt;/font&gt;
	&lt;li&gt;&lt;p&gt;&lt;font face="宋体, SimSun"&gt;org.springframework.orm.hibernate3.
	LocalSessionFactoryBean&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;：配置本地的&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;Hibernate
	SessionFactory&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;的工厂&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;bean&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;。&lt;/span&gt;&lt;/font&gt;
	&lt;li&gt;&lt;p&gt;&lt;font face="宋体, SimSun"&gt;org.springframework.aop.framework
	ProxyFactoryBean&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;：通用的用于获得&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;AOP&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;代理的工厂&lt;/span&gt;&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;bean&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;。&lt;/span&gt;&lt;/font&gt;
	&lt;li&gt;&lt;p&gt;&lt;font face="宋体, SimSun"&gt;org.springframework.transaction.interceptor.TransactionProxyFactoryBean&lt;/font&gt;&lt;font face="宋体, SimSun"&gt;&lt;span lang=zh-CN&gt;：用于为对象创建事务代理，用于实现简介易用申明性事务管理。&lt;/span&gt;&lt;/font&gt;
	&lt;li&gt;&lt;p&gt;…………&lt;font face="宋体, SimSun"&gt;etc&lt;/font&gt;
&lt;/ul&gt;
&lt;p&gt;http://www.writely.com/View.aspx?docid=bdd75r9hmc98j
&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+Spring%e4%b9%8bFactoryBean%ef%bc%88%e5%b7%a5%e5%8e%82Bean%ef%bc%89&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!187.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!187.entry</guid><pubDate>Sat, 15 Apr 2006 14:36:20 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!187/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!187.entry#comment</wfw:comment><dcterms:modified>2006-04-15T14:36:20Z</dcterms:modified></item><item><title>Spring AOP</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!131.entry</link><description>&lt;div&gt;对AOP的概念一直是蒙蒙融融的。而且看Spring的文档上面对AOP的叙述还是不够清楚。 甚至看了文档还是不知道怎样使用Spring AOP， 直到我看了这篇文章。&lt;a href="http://www.javalobby.com/forums/thread.jspa?messageID=91951283&amp;amp;#91951283"&gt;http://www.javalobby.com/forums/thread.jspa?messageID=91951283&amp;amp;#91951283&lt;/a&gt;。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;AOP重要的两个概念， Advice和PointCut。&lt;/div&gt;
&lt;div&gt;Advice --&amp;gt; what       你做的事情。&lt;/div&gt;
&lt;div&gt;PointCut --&amp;gt; where   你想在什么地方做事情。 也就是类中的那些方法（注意：现在Spring AOP还只支持Method  Interceptor）。&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;看看Spring中Advice的类的层次。&lt;/div&gt;
&lt;p&gt;&lt;img src="http://www.javalobby.org/images/postings/rj/spring_aop/1.gif"&gt; 
&lt;p&gt;看看Pointcut的层次
&lt;p&gt;&lt;img src="http://www.javalobby.org/images/postings/rj/spring_aop/2.gif"&gt; 
&lt;p&gt;Spring 提供了整合Advice和Pointcut的接口。&lt;img src="http://www.javalobby.org/images/postings/rj/spring_aop/3.gif"&gt; 
&lt;p&gt; 这样我们只要提供PointcutAdvisor， 就能够知道在那个类的那些方法里面做什么事情了。
&lt;p&gt;现在我们还需要另外一个类帮助我们实现AOP。（ org.springframework.aop.framework.ProxyFactoryBean）
&lt;p&gt; 
&lt;p&gt; &lt;pre&gt;&lt;font color="#0000ff"&gt;&amp;lt;!-- A simple MethodInterceptor style advice object (InterceptorA implements MethodInterceptor) --&amp;gt;
&amp;lt;bean name=&amp;quot;interceptorA&amp;quot; class=&amp;quot;com.javalobby.tnt.spring.aop.InterceptorA&amp;quot; /&amp;gt;
&amp;lt;!-- A simple MethodBeforeAdvice style advice object (BeforeAdviceA implements MethodBeforeAdvice) --&amp;gt;
&amp;lt;bean name=&amp;quot;beforeAdviceA&amp;quot; class=&amp;quot;com.javalobby.tnt.spring.aop.BeforeAdviceA&amp;quot;/&amp;gt;

&amp;lt;!-- Create our controller bean --&amp;gt;
&amp;lt;bean name=&amp;quot;myRawController&amp;quot; class=&amp;quot;com.javalobby.tnt.spring.aop.ExampleController&amp;quot; /&amp;gt;

&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;pre&gt;&lt;font color="#0000ff"&gt;&amp;lt;!-- Create the proxy bean that returns AOP'd varieties of our controller --&amp;gt;
&amp;lt;bean name=&amp;quot;myController&amp;quot; class=&amp;quot;org.springframework.aop.framework.ProxyFactoryBean&amp;quot;&amp;gt;
	&amp;lt;property name=&amp;quot;target&amp;quot; ref=&amp;quot;myRawController&amp;quot;/&amp;gt;
	&amp;lt;property name=&amp;quot;interceptorNames&amp;quot;&amp;gt;
		&amp;lt;list&amp;gt;
			&amp;lt;value&amp;gt;beforeAdviceA&amp;lt;/value&amp;gt;
			&amp;lt;value&amp;gt;beforeAdviceA&amp;lt;/value&amp;gt;
		&amp;lt;/list&amp;gt;
	&amp;lt;/property&amp;gt;
&amp;lt;/bean&amp;gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;这样我们就对所有方法上面实现了beforeAdviceA，beforeAdviceA拦截。如果我们需要对这个类的特定方法进行拦截，如下&lt;/pre&gt;&lt;pre&gt; &lt;pre&gt;&lt;font color="#0000ff"&gt;&amp;lt;!-- A simple MethodInterceptor style advice object (InterceptorA implements MethodInterceptor) --&amp;gt;
&amp;lt;bean name=&amp;quot;interceptorA&amp;quot; class=&amp;quot;com.javalobby.tnt.spring.aop.InterceptorA&amp;quot; /&amp;gt;
&amp;lt;!-- A simple MethodBeforeAdvice style advice object (BeforeAdviceA implements MethodBeforeAdvice) --&amp;gt;
&amp;lt;bean name=&amp;quot;beforeAdviceA&amp;quot; class=&amp;quot;com.javalobby.tnt.spring.aop.BeforeAdviceA&amp;quot;/&amp;gt;

&amp;lt;!-- 
Use the NameMatchMethod pointcut advisor to make things a little simpler.
--&amp;gt;
&amp;lt;bean name=&amp;quot;pointcut.advisor1&amp;quot; class=&amp;quot;org.springframework.aop.support.NameMatchMethodPointcutAdvisor&amp;quot;&amp;gt;
 &amp;lt;property name=&amp;quot;advice&amp;quot; ref=&amp;quot;interceptorA&amp;quot;/&amp;gt;
 &amp;lt;property name=&amp;quot;mappedName&amp;quot; value=&amp;quot;handleRequestInternal&amp;quot;/&amp;gt;
&amp;lt;/bean&amp;gt;

&amp;lt;!-- 
Use the NameMatchMethod pointcut advisor to make things a little simpler.
--&amp;gt;
&amp;lt;bean name=&amp;quot;pointcut.advisor2&amp;quot; class=&amp;quot;org.springframework.aop.support.NameMatchMethodPointcutAdvisor&amp;quot;&amp;gt;
 &amp;lt;property name=&amp;quot;advice&amp;quot; ref=&amp;quot;beforeAdviceA&amp;quot;/&amp;gt;
 &amp;lt;property name=&amp;quot;mappedName&amp;quot; value=&amp;quot;handleRequestInternal&amp;quot;/&amp;gt;
&amp;lt;/bean&amp;gt;

&amp;lt;!-- Create our controller bean --&amp;gt;
&amp;lt;bean name=&amp;quot;myRawController&amp;quot; class=&amp;quot;com.javalobby.tnt.spring.aop.ExampleController&amp;quot; /&amp;gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;&lt;font color="#0000ff"&gt;&lt;/font&gt; &lt;/pre&gt;&lt;pre&gt;&lt;font color="#0000ff"&gt;&amp;lt;!-- Create the proxy bean that returns AOP'd varieties of our controller --&amp;gt;
&amp;lt;bean name=&amp;quot;myController&amp;quot; class=&amp;quot;org.springframework.aop.framework.ProxyFactoryBean&amp;quot;&amp;gt;
	&amp;lt;property name=&amp;quot;target&amp;quot; ref=&amp;quot;myRawController&amp;quot;/&amp;gt;
	&amp;lt;property name=&amp;quot;interceptorNames&amp;quot;&amp;gt;
		&amp;lt;list&amp;gt;
			&amp;lt;value&amp;gt;pointcut.advisor1&amp;lt;/value&amp;gt;
			&amp;lt;value&amp;gt;pointcut.advisor2&amp;lt;/value&amp;gt;
		&amp;lt;/list&amp;gt;
	&amp;lt;/property&amp;gt;
&amp;lt;/bean&amp;gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre&gt;我们就实现了对myRawController的handleRequestInternal方法进行拦截。&lt;/pre&gt;&lt;/pre&gt;
&lt;p&gt; 
&lt;p&gt;If you don't need direct (non-AOP'd) access to your bean, then it may be better for the simplicity of the file to just use an anonymous inner bean, rather than declaring the bean seperately to the proxy: 
&lt;p&gt;&lt;pre&gt;&lt;font color="#0000ff"&gt;&amp;lt;!-- Create the proxy bean that returns AOP'd varieties of our controller --&amp;gt;
&amp;lt;bean name=&amp;quot;myController&amp;quot; class=&amp;quot;org.springframework.aop.framework.ProxyFactoryBean&amp;quot;&amp;gt;
	&amp;lt;property name=&amp;quot;target&amp;quot;&amp;gt;&amp;lt;bean class=&amp;quot;com.javalobby.tnt.aop.ExampleController&amp;quot;/&amp;gt;&amp;lt;/property&amp;gt;
	&amp;lt;property name=&amp;quot;interceptorNames&amp;quot;&amp;gt;
		&amp;lt;list&amp;gt;
			&amp;lt;value&amp;gt;beforeAdviceA&amp;lt;/value&amp;gt;
			&amp;lt;value&amp;gt;interceptorA&amp;lt;/value&amp;gt;
		&amp;lt;/list&amp;gt;
	&amp;lt;/property&amp;gt;
&amp;lt;/bean&amp;gt;
&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt; 详情请参考那篇文章。
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+Spring+AOP&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!131.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!131.entry</guid><pubDate>Wed, 02 Nov 2005 02:42:16 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!131/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!131.entry#comment</wfw:comment><dcterms:modified>2005-11-02T02:42:16Z</dcterms:modified></item><item><title>spring 控制hibernate的session何时关闭.</title><link>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!120.entry</link><description>&lt;a href="http://blog.csdn.net/dengyin2000/archive/2005/08/08/448341.aspx"&gt;http://blog.csdn.net/dengyin2000/archive/2005/08/08/448341.aspx&lt;/a&gt;
&lt;div&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5815636772130029849&amp;page=RSS%3a+spring+%e6%8e%a7%e5%88%b6hibernate%e7%9a%84session%e4%bd%95%e6%97%b6%e5%85%b3%e9%97%ad.&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=dengyin2000.spaces.live.com&amp;amp;GT1=dengyin2000"&gt;</description><comments>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!120.entry#comment</comments><guid isPermaLink="true">http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!120.entry</guid><pubDate>Wed, 14 Sep 2005 05:09:58 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://dengyin2000.spaces.live.com/blog/cns!AF4AB52B167D7EE7!120/comments/feed.rss</wfw:commentRss><wfw:comment>http://dengyin2000.spaces.live.com/Blog/cns!AF4AB52B167D7EE7!120.entry#comment</wfw:comment><dcterms:modified>2005-09-14T05:09:58Z</dcterms:modified></item></channel></rss>