﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-昊天-随笔分类-spring</title><link>http://www.blogjava.net/hao446tian/category/49844.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 26 Mar 2013 14:37:04 GMT</lastBuildDate><pubDate>Tue, 26 Mar 2013 14:37:04 GMT</pubDate><ttl>60</ttl><item><title>spring + ibatis 多数据源事务（分布式事务）管理配置方法(转)</title><link>http://www.blogjava.net/hao446tian/archive/2013/03/21/396794.html</link><dc:creator>昊天</dc:creator><author>昊天</author><pubDate>Thu, 21 Mar 2013 03:39:00 GMT</pubDate><guid>http://www.blogjava.net/hao446tian/archive/2013/03/21/396794.html</guid><wfw:comment>http://www.blogjava.net/hao446tian/comments/396794.html</wfw:comment><comments>http://www.blogjava.net/hao446tian/archive/2013/03/21/396794.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hao446tian/comments/commentRss/396794.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hao446tian/services/trackbacks/396794.html</trackback:ping><description><![CDATA[<p>1、我先要给大家讲一个概念：spring 的多数据源事务，这是民间的说法。官方的说法是：spring 的分布式事务。明白了这个概念，问题就好解决了。</p>
<p>2、分布式事务的应用场景：工程中使用两个及以上数据库中，就要考虑使用分布式事务管理，否则事务不能回滚。</p>
<p>3、现有两种开源的第三方jar支持spring的分布式事务管理，它们分别是：jotm和Atomikos。通过google可以找到下载的链接，其中atomikos的下载需要先填写email信息，再登录email找到链接去下载。下载地址分别：</p>
<p>1、<a href="http://jotm.objectweb.org/">http://jotm.objectweb.org/</a></p>
<p>2、<a href="http://www.atomikos.com/Main/InstallingTransactionsEssentials">http://www.atomikos.com/Main/InstallingTransactionsEssentials</a></p>
<p>我使用的是jotm。</p>
<p>4、基于spring+ibatis的环境下配置jotm的方法很简单。只城要修改spring数据源的配置及事务的配置及可。以下是我的配置，供参考。</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Xml代码 <a title="复制代码" href="http://bo-hai.iteye.com/blog/1748647#"></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"></a></div></div>
<ol class="dp-xml"><li><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span></span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">bean</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">id</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"jotm"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">class</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"org.springframework.transaction.jta.JotmFactoryBean"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"defaultTimeout"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"500000"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span></span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span></font></strong><span>&nbsp; &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span></span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">bean</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">id</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"dataSource"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">class</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"org.enhydra.jdbc.pool.StandardXAPoolDataSource"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">destroy-method</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"shutdown"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"dataSource"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">bean</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">class</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"org.enhydra.jdbc.standard.StandardXADataSource"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">destroy-method</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"shutdown"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"transactionManager"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">ref</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"jotm"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"driverName"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"${driverClass}"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"url"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"${jdbcUrl}"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"user"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"${user}"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"password"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"${password}"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span></span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span></span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">bean</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">id</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"dataSourceBbs"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">class</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"org.enhydra.jdbc.pool.StandardXAPoolDataSource"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">destroy-method</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"shutdown"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"dataSource"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">bean</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">class</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"org.enhydra.jdbc.standard.StandardXADataSource"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">destroy-method</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"shutdown"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"transactionManager"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">ref</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"jotm"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"driverName"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"${bbs.driverClass}"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"url"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"${bbs.jdbcUrl}"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">property</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"user"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"${bbs.user}"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"password"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">value</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"${bbs.password}"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span></span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span></span><span class="comments">&lt;!--&nbsp;JTA事务管理器&nbsp;--&gt;</span><span>&nbsp;&nbsp;</span></span></li><li><span></span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">bean</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">id</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"myJtaManager"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">class</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"org.springframework.transaction.jta.JtaTransactionManager"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">property</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"userTransaction"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">ref</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"jotm"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span></span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span></font></strong><span>&nbsp; &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;</span></li><li><span>&nbsp;</span><span class="comments">&lt;!--&nbsp;事务切面配置&nbsp;--&gt;</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">aop:config</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">aop:pointcut</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">id</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"serviceOperation"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">expression</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"execution(*&nbsp;com.bohai.service.impl.*.*(..))"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">aop:advisor</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">pointcut-ref</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"serviceOperation"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">advice-ref</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"txAdvice"</font></span><span>&nbsp;&nbsp;</span><span class="attribute"><font color="#ff0000">order</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"0"</font></span><span>&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">aop:config</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp; &nbsp;&nbsp;</span></li><li><span>&nbsp;</span><span class="comments">&lt;!--&nbsp;通知配置&nbsp;--&gt;</span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">tx:advice</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">id</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"txAdvice"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">transaction-manager</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"myJtaManager"</font></span><span class="tag"><strong><font color="#006699">&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">tx:attributes</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">tx:method</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"delete*"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">propagation</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"REQUIRED"</font></span><span>&nbsp;&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">tx:method</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"save*"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">propagation</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"REQUIRED"</font></span><span>&nbsp;&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">tx:method</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"update*"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">propagation</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"REQUIRED"</font></span><span>&nbsp;&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">tx:method</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"*"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">propagation</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"REQUIRED"</font></span><span>&nbsp;&nbsp;</span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">tx:method</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"find*"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">propagation</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"SUPPORTS"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">read-only</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"true"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">tx:method</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"get*"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">propagation</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"SUPPORTS"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">read-only</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"true"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">tx:method</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"fetch*"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">propagation</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"SUPPORTS"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">read-only</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"true"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;</span><span class="tag-name">tx:method</span></font></strong><span>&nbsp;</span><span class="attribute"><font color="#ff0000">name</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"*_noTrans"</font></span><span>&nbsp;</span><span class="attribute"><font color="#ff0000">propagation</font></span><span>=</span><span class="attribute-value"><font color="#0000ff">"NOT_SUPPORTED"</font></span><span class="tag"><strong><font color="#006699">/&gt;</font></strong></span><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">tx:attributes</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></span></li><li><span>&nbsp;</span><strong><font color="#006699"><span class="tag">&lt;/</span><span class="tag-name">tx:advice</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li></ol></div><pre class="xml" title="spring + ibatis 多数据源事务（分布式事务）管理配置方法" style="display: none" name="code" codeable_id="1748647" codeable_type="Blog" source_url="http://bo-hai.iteye.com/blog/1748647" pre_index="0">&nbsp;</pre>&nbsp;5、jtom 还需要一个配置文件 carol.properties ，内容是： 
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" href="http://bo-hai.iteye.com/blog/1748647#"></a>&nbsp;<a title="收藏这段代码" href="javascript:void()"></a></div></div>
<ol class="dp-j"><li><span>#&nbsp;</span><span class="keyword">do</span><span>&nbsp;not&nbsp;use&nbsp;CAROL&nbsp;JNDI&nbsp;wrapper&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>carol.start.jndi=</span><span class="keyword">false</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>#&nbsp;</span><span class="keyword">do</span><span>&nbsp;not&nbsp;start&nbsp;a&nbsp;name&nbsp;server&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li><li><span>carol.start.ns=</span><span class="keyword">false</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>#&nbsp;Naming&nbsp;Factory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li><li><span>carol.jndi.java.naming.factory.url.pkgs=org.apache.naming&nbsp;&nbsp;&nbsp;</span></li></ol></div>
<p>&nbsp;</p>
<p>文件放在classpath下面，也就是src下面。</p>
<p>6、需要jtom的以下jar：</p>
<p><br /><a href="http://static.oschina.net/uploads/space/2012/1217/092008_iJyE_658145.png" target="_blank" sizset="0" sizcache002475368077120793="1009"><img style="cursor: pointer" alt="" src="http://static.oschina.net/uploads/space/2012/1217/092008_iJyE_658145.png" /></a>&nbsp;</p>
<p>7、经过测试，配置是成功的。事务可以回滚。<br />&nbsp;</p><img src ="http://www.blogjava.net/hao446tian/aggbug/396794.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hao446tian/" target="_blank">昊天</a> 2013-03-21 11:39 <a href="http://www.blogjava.net/hao446tian/archive/2013/03/21/396794.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring 如何初始化一个容器 </title><link>http://www.blogjava.net/hao446tian/archive/2011/10/14/361303.html</link><dc:creator>昊天</dc:creator><author>昊天</author><pubDate>Fri, 14 Oct 2011 09:43:00 GMT</pubDate><guid>http://www.blogjava.net/hao446tian/archive/2011/10/14/361303.html</guid><wfw:comment>http://www.blogjava.net/hao446tian/comments/361303.html</wfw:comment><comments>http://www.blogjava.net/hao446tian/archive/2011/10/14/361303.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hao446tian/comments/commentRss/361303.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hao446tian/services/trackbacks/361303.html</trackback:ping><description><![CDATA[<div class="postText">什么是Spring 的 IOC 容器呢 ?&nbsp; 可以说&nbsp; BeanFactory 就是 我们看到的Spring IoC容器.<br /><br />如何初始化 SPRING 的 IOC 容器 ? <br /><br />一共三种方法 ：<br /><br />1 ：<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"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">Resource&nbsp;resource&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileSystemResource(</span><span style="color: #000000">"</span><span style="color: #000000">beans.xml</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><strong style="color: #000080">BeanFactory</strong>&nbsp;factory&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;<u>XmlBeanFactory</u>(resource);</span></div>
<p><br />2：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">ClassPathResource&nbsp;resource&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ClassPathResource(</span><span style="color: #000000">"</span><span style="color: #000000">beans.xml</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><strong style="color: #003366">BeanFactory</strong>&nbsp;factory&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;<u>XmlBeanFactory</u>(resource);</span></div>
<p>&nbsp;<br />3：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_78_135_Open_Image" onclick="this.style.display='none'; Codehighlighter1_78_135_Open_Text.style.display='none'; Codehighlighter1_78_135_Closed_Image.style.display='inline'; Codehighlighter1_78_135_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_78_135_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_78_135_Closed_Text.style.display='none'; Codehighlighter1_78_135_Open_Image.style.display='inline'; Codehighlighter1_78_135_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top"><span style="color: #000000">ApplicationContext&nbsp;context&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;<u>ClassPathXmlApplicationContext</u>(&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;String[]&nbsp;</span><span id="Codehighlighter1_78_135_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_78_135_Open_Text"><span style="color: #000000">{</span><span style="color: #000000">"</span><span style="color: #000000">applicationContext.xml</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">applicationContext-part2.xml</span><span style="color: #000000">"</span><span style="color: #000000">}</span></span><span style="color: #000000">);<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><strong style="color: #003366">BeanFactory</strong>&nbsp;factory&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(BeanFactory)&nbsp;context;</span></div>
<p><br />详细展开 ：<br /><br />一 ：org.springframework.core.io包中主要是各样的Resource类<br /><br /><img height="768" alt="" src="http://www.blogjava.net/images/blogjava_net/liuwentao253/5.jpg" width="672" border="0" /><br /><br />补充UML 知识 ：<br /><br />1：类名是斜体的表示是抽象类，正体的表示普通类<br /><br />2 ：<br /><img height="153" alt="" src="http://www.blogjava.net/images/blogjava_net/liuwentao253/SNAG-0005.jpg" width="683" border="0" /><br />3 ：<br /><br />&nbsp;&nbsp;&nbsp; <img height="291" alt="" src="http://www.blogjava.net/images/blogjava_net/liuwentao253/SNAG-0006.jpg" width="536" border="0" /><br /><br /></p><a title="温昱说图" href="http://gocom.primeton.com/blog/index.php?op=ViewArticle&amp;articleId=93&amp;blogId=23"><font color="#000080">温昱说图</font></a><br /><br />org.springframework.core.io包中主要是各样的Resource类，Spring的 <code class="interfacename">Resource</code> 接口是为了提供更强的访问底层资源能力的抽象。相当巧妙的地方在于，为何AbstractResource的子类有的override了getFile()而有的没有？这是因为在AbstractResource的getFile()方法设计为抛出异常，如果子类没有重写此方法，说明子类不支持通过绝对路径查找资源的方式，而override的子类则提供自己的实现。这里通过类的层次设计，充分利用继承带来的优点，避免了大量的条件语句。<br /><br /><br />二&nbsp;：关于 org.springframework.beans.factory 包 和 org.springframework.context 包：<br /><br />1 ：BeanFactory 是个接口，LifecycleBean 是个类它负责管理bean的生命周期，它实现了4个接口，并且有一个 BeanFactory&nbsp; 类型的变量 owningFactory<br /><br /><img height="612" alt="" src="http://www.blogjava.net/images/blogjava_net/liuwentao253/6.jpg" width="660" border="0" /><br /><br />补充一下 上文 的 XmlBeanFactory 不是 <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"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">org.springframework.beans.factory</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"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">org.springframework.beans.factory.xml</span></div><br />下面的<br /><br />2 。 ApplicationContext 也是个接口，它继承的 ListableBeanFactory&nbsp; 接口 又 继承 BeanFactory 接口<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"><img id="Codehighlighter1_158_160_Open_Image" onclick="this.style.display='none'; Codehighlighter1_158_160_Open_Text.style.display='none'; Codehighlighter1_158_160_Closed_Image.style.display='inline'; Codehighlighter1_158_160_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_158_160_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_158_160_Closed_Text.style.display='none'; Codehighlighter1_158_160_Open_Image.style.display='inline'; Codehighlighter1_158_160_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;<strong>ApplicationContext&nbsp;</strong></span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;<u>ListableBeanFactory</u>,&nbsp;HierarchicalBeanFactory,&nbsp;&nbsp;MessageSource,&nbsp;ApplicationEventPublisher,&nbsp;ResourcePatternResolver&nbsp;</span><span id="Codehighlighter1_158_160_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_158_160_Open_Text"><span style="color: #000000">{<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><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"><img id="Codehighlighter1_57_59_Open_Image" onclick="this.style.display='none'; Codehighlighter1_57_59_Open_Text.style.display='none'; Codehighlighter1_57_59_Closed_Image.style.display='inline'; Codehighlighter1_57_59_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_57_59_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_57_59_Closed_Text.style.display='none'; Codehighlighter1_57_59_Open_Image.style.display='inline'; Codehighlighter1_57_59_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top"><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;<u>ListableBeanFactory</u>&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;<strong>BeanFactory</strong>&nbsp;</span><span id="Codehighlighter1_57_59_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_57_59_Open_Text"><span style="color: #000000">{<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Spring的bean包支持通过编码方式管理和操作bean的基本功能，ApplicationContext则以Framework的方式提供BeanFactory的所有功能。使用<br />ApplicationContext，你可以让系统加载你的bean，例如：<br /><br />在Servlet容器初始化ContextLoaderServlet时，通过ContextLoader类加载Spring Framework），而不是使用编码方式来加载。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ApplicationContext接口是context包的基础，位于org.springframework.context包里，提供了BeanFactory的所有功能。除此之外， ApplicationContext为了支持Framework的工作方式，提供了以下的功能：<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"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l.MessageSource，提供了语言信息的国际化支持<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">.提供资源（如URL和文件系统）的访问支持<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">3</span><span style="color: #000000">.为实现了ApplicationListener接口的bean提供了事件传播支持<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">4</span><span style="color: #000000">.为不同的应用环境提供不同的context，例如支持web应用的XmlWebApplicationContext类</span></div><br /><br /></div><img src ="http://www.blogjava.net/hao446tian/aggbug/361303.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hao446tian/" target="_blank">昊天</a> 2011-10-14 17:43 <a href="http://www.blogjava.net/hao446tian/archive/2011/10/14/361303.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用 Spring 和 EHCache 缓存结果（翻译） </title><link>http://www.blogjava.net/hao446tian/archive/2011/10/14/361301.html</link><dc:creator>昊天</dc:creator><author>昊天</author><pubDate>Fri, 14 Oct 2011 09:29:00 GMT</pubDate><guid>http://www.blogjava.net/hao446tian/archive/2011/10/14/361301.html</guid><wfw:comment>http://www.blogjava.net/hao446tian/comments/361301.html</wfw:comment><comments>http://www.blogjava.net/hao446tian/archive/2011/10/14/361301.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hao446tian/comments/commentRss/361301.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hao446tian/services/trackbacks/361301.html</trackback:ping><description><![CDATA[<p><strong><strong><span style="font-size: 14pt; font-family: 宋体">导言 </strong><strong><span style="font-size: 14pt; font-family: Arial">
<p>&nbsp;</p></span></strong></strong></span>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">从</span> <span style="font-family: Arial">Spring 1.1.1 </span><span style="font-family: 宋体">开始，</span> <span style="font-family: Arial"><a href="http://ehcache.sourceforge.net/">EHCache</a> </span><span style="font-family: 宋体">就作为一种通用缓存解决方案集成进</span> <span style="font-family: Arial">Spring</span> <span style="font-family: 宋体">。</span> <span style="font-family: Arial">
<p>&nbsp;</p></span>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">我将示范拦截器的例子，它能把方法返回的结果缓存起来。</span> <span style="font-family: Arial"><br /><br /></span></p>
<p>&nbsp;</p>
<p><strong><span style="font-size: 14pt; font-family: 宋体"><br />利用</span> </strong><strong><span style="font-size: 14pt; font-family: Arial">Spring IoC </span></strong><strong><span style="font-size: 14pt; font-family: 宋体">配置</span> </strong><strong><span style="font-size: 14pt; font-family: Arial">EHCache 
<p>&nbsp;</p></span></strong>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">在</span> <span style="font-family: Arial">Spring </span><span style="font-family: 宋体">里配置</span> <span style="font-family: Arial">EHCache </span><span style="font-family: 宋体">很简单。你只需一个</span> <span style="font-family: Arial">ehcache.xml </span><span style="font-family: 宋体">文件，该文件用于配置</span> <span style="font-family: Arial">EHCache </span><span style="font-family: 宋体">：</span> </p>
<p>&nbsp;</p>
<p><span style="font-family: Arial">
<p>&nbsp;</p>
<table style="width: 527px; height: 593px" height="593" cellspacing="0" cellpadding="0" width="527" border="1">
<tbody>
<tr>
<td>
<p>&lt;ehcache&gt; </p>
<p>&nbsp;&nbsp;&nbsp; &lt;!&#8212;设置缓存文件 .data 的创建路径。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果该路径是 Java 系统参数，当前虚拟机会重新赋值。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下面的参数这样解释：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.home &#8211; 用户主目录<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.dir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8211; 用户当前工作目录<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.io.tmpdir &#8211; 默认临时文件路径 --&gt;<br />&nbsp;&nbsp;&nbsp; &lt;diskStore path="java.io.tmpdir"/&gt; </p>
<p><br />&nbsp;&nbsp;&nbsp; &lt;!&#8212;缺省缓存配置。CacheManager 会把这些配置应用到程序中。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下列属性是 defaultCache 必须的： </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxInMemory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - 设定内存中创建对象的最大值。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eternal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - 设置元素（译注：内存中对象）是否永久驻留。如果是，将忽略超<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;时限制且元素永不消亡。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeToIdleSeconds&nbsp; - 设置某个元素消亡前的停顿时间。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 也就是在一个元素消亡之前，两次访问时间的最大时间间隔值。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这只能在元素不是永久驻留时有效（译注：如果对象永恒不灭，则<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置该属性也无用）。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果该值是 0 就意味着元素可以停顿无穷长的时间。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeToLiveSeconds&nbsp;- 为元素设置消亡前的生存时间。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 也就是一个元素从构建到消亡的最大时间间隔值。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这只能在元素不是永久驻留时有效。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; overflowToDisk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - 设置当内存中缓存达到 maxInMemory 限制时元素是否可写到磁盘<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;上。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt; </p>
<p>&nbsp;&nbsp;&nbsp; &lt;cache name="org.taha.cache.METHOD_CACHE"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxElementsInMemory="300"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eternal="false"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeToIdleSeconds="500"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeToLiveSeconds="500"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; overflowToDisk="true"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&gt;<br />&lt;/ehcache&gt; </p></td></tr></tbody></table></span>&nbsp; 
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">拦截器将使用</span> <span style="font-family: Arial">&#8221;<strong>org.taha.cache.METHOD_CACHE</strong>&#8221; </span><span style="font-family: 宋体">区域缓存方法返回结果。下面利用</span> <span style="font-family: Arial">Spring IoC </span><span style="font-family: 宋体">让</span> <span style="font-family: Arial">bean </span><span style="font-family: 宋体">来访问这一区域。</span> </p>
<p>&nbsp;</p>
<p><span style="font-family: Arial">
<p>&nbsp;</p>
<table style="width: 525px; height: 249px" height="249" cellspacing="0" cellpadding="0" width="525" border="1">
<tbody>
<tr>
<td>
<p>&lt;!-- ======================&nbsp;&nbsp; 缓存&nbsp;&nbsp; ======================= --&gt; </p>
<p>&lt;bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"&gt;<br />&nbsp; &lt;property name="configLocation"&gt;<br />&nbsp;&nbsp;&nbsp; &lt;value&gt;classpath:ehcache.xml&lt;/value&gt;<br />&nbsp; &lt;/property&gt;<br />&lt;/bean&gt; </p>
<p>&lt;bean id="methodCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean"&gt;<br />&nbsp; &lt;property name="cacheManager"&gt;<br />&nbsp;&nbsp;&nbsp; &lt;ref local="cacheManager"/&gt;<br />&nbsp; &lt;/property&gt;<br />&nbsp; &lt;property name="cacheName"&gt;<br />&nbsp;&nbsp;&nbsp; &lt;value&gt;org.taha.cache.METHOD_CACHE&lt;/value&gt;<br />&nbsp; &lt;/property&gt;<br />&lt;/bean&gt; </p></td></tr></tbody></table>&nbsp;</span>&nbsp;&nbsp; 
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong><span style="font-size: 14pt; font-family: 宋体">构建我们的</span> </strong><strong><span style="font-size: 14pt; font-family: Arial">MethodCacheInterceptor </span></strong><span style="font-family: Arial">
<p>&nbsp;</p></span>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">该拦截器实现</span> <span style="font-family: Arial"><a href="http://cvs.sourceforge.net/viewcvs.py/aopalliance/aopalliance/src/main/org/aopalliance/intercept/MethodInterceptor.java?view=markup">org.aopalliance.intercept.MethodInterceptor</a> </span><span style="font-family: 宋体">接口。一旦</span> <span style="font-family: 宋体">运行起来</span> <span style="font-family: Arial">(kicks-in)</span> <span style="font-family: 宋体">，它首先检查被拦截方法是否被配置为可缓存的。这将可选择性的配置想要缓存的</span> <span style="font-family: Arial">bean </span><span style="font-family: 宋体">方法。只要调用的方法配置为可缓存，拦截器将为该方法生成</span> <span style="font-family: Arial">cache key </span><span style="font-family: 宋体">并检查该方法返回的结果是否已缓存。如果已缓存，就返回缓存的结果，否则再次调用被拦截方法，并缓存结果供下次调用。</span> </p>
<p>&nbsp;</p>
<p><strong><span style="font-family: Arial">org.taha.interceptor.MethodCacheInterceptor </span></strong></p>
<p>&nbsp;</p>
<p><span style="font-family: Arial">
<p>&nbsp;</p>
<table style="width: 528px; height: 100px" height="100" cellspacing="0" cellpadding="0" width="528" border="1">
<tbody>
<tr>
<td>
<p>/*<br />&nbsp;* Copyright 2002-2004 the original author or authors.<br />&nbsp;*<br />&nbsp;* Licensed under the Apache License, Version 2.0 (the "License");<br />&nbsp;* you may not use this file except in compliance with the License.<br />&nbsp;* You may obtain a copy of the License at<br />&nbsp;*<br />&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0 </a><br />&nbsp;*<br />&nbsp;* Unless required by applicable law or agreed to in writing, software<br />&nbsp;* distributed under the License is distributed on an "AS IS" BASIS,<br />&nbsp;* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<br />&nbsp;* See the License for the specific language governing permissions and<br />&nbsp;* limitations under the License.<br />&nbsp;*/ </p>
<p>package org.taha.interceptor; </p>
<p>import java.io.Serializable; </p>
<p>import org.aopalliance.intercept.MethodInterceptor;<br />import org.aopalliance.intercept.MethodInvocation; </p>
<p>import org.apache.commons.logging.LogFactory;<br />import org.apache.commons.logging.Log; </p>
<p>import org.springframework.beans.factory.InitializingBean;<br />import org.springframework.util.Assert; </p>
<p>import net.sf.ehcache.Cache;<br />import net.sf.ehcache.Element; </p>
<p>/**<br />&nbsp;* @author &lt;a href=" <a href='&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#105;&#114;&#98;&#111;&#117;&#104;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;&#34;&#62;&#79;&#109;&#97;&#114;' temp_href='mailto:irbouh@gmail.com">Omar'>mailto:irbouh@gmail.com"&gt;Omar </a>Irbouh&lt;/a&gt;<br />&nbsp;* @since 2004.10.07<br />&nbsp;*/<br />public class MethodCacheInterceptor implements MethodInterceptor, InitializingBean {<br />&nbsp; private static final Log logger = LogFactory.getLog(MethodCacheInterceptor.class); </p>
<p>&nbsp; private Cache cache; </p>
<p>&nbsp; /**<br />&nbsp;&nbsp; * 设置缓存名<br />&nbsp;&nbsp; */<br />&nbsp; public void setCache(Cache cache) {<br />&nbsp;&nbsp;&nbsp; this.cache = cache;<br />&nbsp; } </p>
<p>&nbsp; /**<br />&nbsp;&nbsp; * 检查是否提供必要参数。<br />&nbsp;&nbsp; */<br />&nbsp; public void afterPropertiesSet() throws Exception {<br />&nbsp;&nbsp;&nbsp; Assert.notNull(cache, "A cache is required. Use setCache(Cache) to provide one.");<br />&nbsp; } </p>
<p>&nbsp; /**<br />&nbsp;&nbsp; * 主方法<br />&nbsp;&nbsp; * 如果某方法可被缓存就缓存其结果<br />&nbsp;&nbsp; * 方法结果必须是可序列化的(serializable)<br />&nbsp;&nbsp; */<br />&nbsp; public Object invoke(MethodInvocation invocation) throws Throwable {<br />&nbsp;&nbsp;&nbsp; String targetName&nbsp; = invocation.getThis().getClass().getName();<br />&nbsp;&nbsp;&nbsp; String methodName&nbsp; = invocation.getMethod().getName();<br />&nbsp;&nbsp;&nbsp; Object[] arguments = invocation.getArguments();<br />&nbsp;&nbsp;&nbsp; Object result; </p>
<p>&nbsp;&nbsp;&nbsp; logger.debug("looking for method result in cache");<br />&nbsp;&nbsp;&nbsp; String cacheKey = getCacheKey(targetName, methodName, arguments);<br />&nbsp;&nbsp;&nbsp; Element element = cache.get(cacheKey);<br />&nbsp;&nbsp;&nbsp; if (element == null) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //call target/sub-interceptor<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("calling intercepted method");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = invocation.proceed(); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //cache method result<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logger.debug("caching result");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; element = new Element(cacheKey, (Serializable) result);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cache.put(element);<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; return element.getValue();<br />&nbsp; } </p>
<p>&nbsp; /**<br />&nbsp;&nbsp; * creates cache key: targetName.methodName.argument0.argument1...<br />&nbsp;&nbsp; */<br />&nbsp; private String getCacheKey(String targetName,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String methodName,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object[] arguments) {<br />&nbsp;&nbsp;&nbsp; StringBuffer sb = new StringBuffer();<br />&nbsp;&nbsp;&nbsp; sb.append(targetName)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .append(".").append(methodName);<br />&nbsp;&nbsp;&nbsp; if ((arguments != null) &amp;&amp; (arguments.length != 0)) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i=0; i&lt;arguments.length; i++) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sb.append(".")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .append(arguments[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp; return sb.toString();<br />&nbsp; }<br />} </p></td></tr></tbody></table></span>&nbsp; 
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-family: Arial">MethodCacheInterceptor </span><span style="font-family: 宋体">代码说明了：</span> <span style="font-family: Arial">
<p>&nbsp;</p></span>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<ul type="square"><li style="text-align: left"><span style="font-family: 宋体">默认条件下，所有方法返回结果都被缓存了（</span> <span style="font-family: Arial">methodNames </span><span style="font-family: 宋体">是</span> <span style="font-family: Arial">null</span> <span style="font-family: 宋体">）</span> <span style="font-family: Arial">
<p>&nbsp;</p></span></li><li style="text-align: left"><span style="font-family: 宋体">缓存区利用</span> <span style="font-family: Arial">IoC </span><span style="font-family: 宋体">形成</span> <span style="font-family: Arial">
<p>&nbsp;</p></span></li><li style="text-align: left"><span style="font-family: Arial">cacheKey </span><span style="font-family: 宋体">的生成还包括方法参数的因素（译注：参数的改变会影响</span> <span style="font-family: Arial">cacheKey</span> <span style="font-family: 宋体">）</span> <span style="font-family: Arial">
<p>&nbsp;</p></span></li></ul>
<p><strong><span style="font-size: 14pt; font-family: 宋体">使用</span> </strong><strong><span style="font-size: 14pt; font-family: Arial">MethodCacheInterceptor</span> </strong><span style="font-family: Arial">
<p>&nbsp;</p></span>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体">下面摘录了怎样配置</span> <span style="font-family: Arial">MethodCacheInterceptor </span><span style="font-family: 宋体">：</span> </p>
<p>&nbsp;</p>
<p><span>
<p>&nbsp;</p>
<table style="width: 528px; height: 445px" height="445" cellspacing="0" cellpadding="0" width="528" border="1">
<tbody>
<tr>
<td>
<p>&lt;bean id="methodCacheInterceptor" class="org.taha.interceptor.MethodCacheInterceptor"&gt;<br />&nbsp; &lt;property name="cache"&gt;<br />&nbsp;&nbsp;&nbsp; &lt;ref local="methodCache" /&gt;<br />&nbsp; &lt;/property&gt;<br />&lt;/bean&gt; </p>
<p>&lt;bean id="methodCachePointCut" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"&gt;<br />&nbsp; &lt;property name="advice"&gt;<br />&nbsp;&nbsp;&nbsp; &lt;ref local="methodCacheInterceptor"/&gt;<br />&nbsp; &lt;/property&gt;<br />&nbsp; &lt;property name="patterns"&gt;<br />&nbsp;&nbsp;&nbsp; &lt;list&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;.*methodOne&lt;/value&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;.*methodTwo&lt;/value&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/list&gt;<br />&nbsp; &lt;/property&gt;<br />&lt;/bean&gt; </p>
<p>&lt;bean id="myBean" class="org.springframework.aop.framework.ProxyFactoryBean"&gt;<br />&nbsp; &lt;property name="target"&gt;<br />&nbsp;&nbsp; &lt;bean class="org.taha.beans.MyBean"/&gt;<br />&nbsp; &lt;/property&gt;<br />&nbsp; &lt;property name="interceptorNames"&gt;<br />&nbsp;&nbsp;&nbsp; &lt;list&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;methodCachePointCut&lt;/value&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/list&gt;<br />&nbsp; &lt;/property&gt;<br />&lt;/bean&gt; </p></td></tr></tbody></table></span>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong><span style="font-family: 宋体">译注</span> </strong><strong><span style="font-family: Arial"><br />
<p>&nbsp;</p></span></strong>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p align="left"><span style="font-family: 宋体">如果你要缓存的方法是 findXXX，那么正则表达式应该这样写：&#8220;.*find.*&#8221;。<br /><br />夏昕所著《</span> <span style="font-family: Arial">Hibernate </span><span style="font-family: 宋体">开发指南》，其中他这样描述</span> <span style="font-family: Arial">EHCache </span><span style="font-family: 宋体">配置文件的：</span> </p>
<p>&nbsp;</p>
<p align="left"><span style="font-family: Arial">
<p>&nbsp;</p>
<table style="width: 526px; height: 100px" height="100" cellspacing="0" cellpadding="0" width="526" border="1">
<tbody>
<tr>
<td>&lt;ehcache&gt;<br />&nbsp;&nbsp;&nbsp; &lt;diskStore path="java.io.tmpdir"/&gt;<br />&nbsp;&nbsp;&nbsp; &lt;defaultCache<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxElementsInMemory="10000" //Cache中最大允许保存的数据数量<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eternal="false"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;//Cache中数据是否为常量<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeToIdleSeconds="120"&nbsp;&nbsp;&nbsp;&nbsp; //缓存数据钝化时间<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeToLiveSeconds="120"&nbsp;&nbsp;&nbsp;&nbsp; //缓存数据的生存时间<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; overflowToDisk="true"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //内存不足时，是否启用磁盘缓存<br />&nbsp;&nbsp;&nbsp; /&gt;<br />&lt;/ehcache&gt; </td></tr></tbody></table>&nbsp;<br /><br /><strong>请注意！引用、转贴本文应注明原译者：Rosen Jiang 以及出处：</strong><a href="http://www.blogjava.net/rosen"><strong>http://www.blogjava.net/rosen</strong></a><br /><br /><br /></span>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #008000">&lt;!--</span> <span style="color: #008000">&nbsp;EHCache&nbsp;</span> <span style="color: #008000">--&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">bean&nbsp;</span> <span style="color: #ff0000">id</span> <span style="color: #0000ff">="cacheManager"</span> <span style="color: #ff0000">&nbsp;class</span> <span style="color: #0000ff">="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">property&nbsp;</span> <span style="color: #ff0000">name</span> <span style="color: #0000ff">="configLocation"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">value</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">classpath:ehcache.xml</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">value</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">property</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">bean</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">bean&nbsp;</span> <span style="color: #ff0000">id</span> <span style="color: #0000ff">="methodCache"</span> <span style="color: #ff0000">&nbsp;class</span> <span style="color: #0000ff">="org.springframework.cache.ehcache.EhCacheFactoryBean"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">property&nbsp;</span> <span style="color: #ff0000">name</span> <span style="color: #0000ff">="cacheManager"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">ref&nbsp;</span> <span style="color: #ff0000">local</span> <span style="color: #0000ff">="cacheManager"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">property</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">property&nbsp;</span> <span style="color: #ff0000">name</span> <span style="color: #0000ff">="cacheName"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">value</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">org.taha.cache.METHOD_CACHE</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">value</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">property</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">bean</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">bean&nbsp;</span> <span style="color: #ff0000">id</span> <span style="color: #0000ff">="methodCacheInterceptor"</span> <span style="color: #ff0000">&nbsp;class</span> <span style="color: #0000ff">="com.cdmcs.util.MethodCacheInterceptor"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">property&nbsp;</span> <span style="color: #ff0000">name</span> <span style="color: #0000ff">="cache"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">ref&nbsp;</span> <span style="color: #ff0000">local</span> <span style="color: #0000ff">="methodCache"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">property</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">bean</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">bean&nbsp;</span> <span style="color: #ff0000">id</span> <span style="color: #0000ff">="cleanCacheAdvice"</span> <span style="color: #ff0000">&nbsp;class</span> <span style="color: #0000ff">="com.cdmcs.util.CleanCacheAdvice"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">property&nbsp;</span> <span style="color: #ff0000">name</span> <span style="color: #0000ff">="cache"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">ref&nbsp;</span> <span style="color: #ff0000">local</span> <span style="color: #0000ff">="methodCache"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">property</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">bean</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">bean&nbsp;</span> <span style="color: #ff0000">id</span> <span style="color: #0000ff">="advicePointCut"</span> <span style="color: #ff0000">&nbsp;class</span> <span style="color: #0000ff">="org.springframework.aop.support.RegexpMethodPointcutAdvisor"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">property&nbsp;</span> <span style="color: #ff0000">name</span> <span style="color: #0000ff">="advice"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">ref&nbsp;</span> <span style="color: #ff0000">local</span> <span style="color: #0000ff">="cleanCacheAdvice"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">property</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">property&nbsp;</span> <span style="color: #ff0000">name</span> <span style="color: #0000ff">="patterns"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">list</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">value</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">.*save.*</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">value</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">value</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">.*update.*</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">value</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">value</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">.*delete.*</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">value</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">value</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">.*valid.*</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">value</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">list</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">property</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">bean</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">bean&nbsp;</span> <span style="color: #ff0000">id</span> <span style="color: #0000ff">="methodCachePointCut"</span> <span style="color: #ff0000">&nbsp;class</span> <span style="color: #0000ff">="org.springframework.aop.support.RegexpMethodPointcutAdvisor"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">property&nbsp;</span> <span style="color: #ff0000">name</span> <span style="color: #0000ff">="advice"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">ref&nbsp;</span> <span style="color: #ff0000">local</span> <span style="color: #0000ff">="methodCacheInterceptor"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">property</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">property&nbsp;</span> <span style="color: #ff0000">name</span> <span style="color: #0000ff">="patterns"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">list</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">value</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">.*find.*</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">value</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">list</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">property</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">bean</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br /><br />&nbsp;&nbsp;&nbsp;</span> <span style="color: #008000">&lt;!--</span> <span style="color: #008000">&nbsp;EHCache&nbsp;End</span> <span style="color: #008000">--&gt;</span> <span style="color: #000000"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">bean&nbsp;</span> <span style="color: #ff0000">id</span> <span style="color: #0000ff">="supplyDemandService"</span> <span style="color: #ff0000">&nbsp;parent</span> <span style="color: #0000ff">="baseTransactionProxy"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">property&nbsp;</span> <span style="color: #ff0000">name</span> <span style="color: #0000ff">="target"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">bean&nbsp;</span> <span style="color: #ff0000">class</span> <span style="color: #0000ff">="com.cdmcs.webbuilder.service.impl.SupplyDemandServiceImpl"</span> <span style="color: #ff0000">&nbsp;autowire</span> <span style="color: #0000ff">="byName"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">property</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">property&nbsp;</span> <span style="color: #ff0000">name</span> <span style="color: #0000ff">="preInterceptors"</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">list</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">ref&nbsp;</span> <span style="color: #ff0000">bean</span> <span style="color: #0000ff">="methodCachePointCut"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;</span> <span style="color: #800000">ref&nbsp;</span> <span style="color: #ff0000">bean</span> <span style="color: #0000ff">="advicePointCut"</span> <span style="color: #0000ff">/&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">list</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">property</span> <span style="color: #0000ff">&gt;</span> <span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="color: #0000ff">&lt;/</span> <span style="color: #800000">bean</span> <span style="color: #0000ff">&gt;</span></div> <img src ="http://www.blogjava.net/hao446tian/aggbug/361301.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hao446tian/" target="_blank">昊天</a> 2011-10-14 17:29 <a href="http://www.blogjava.net/hao446tian/archive/2011/10/14/361301.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>