﻿<?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-&lt;b&gt;一路北漂来&lt;/b&gt;-随笔分类-模式与策略</title><link>http://www.blogjava.net/rosen/category/2683.html</link><description>下一阶段：敏捷推进、单元测试</description><language>zh-cn</language><lastBuildDate>Mon, 04 Jan 2010 08:00:59 GMT</lastBuildDate><pubDate>Mon, 04 Jan 2010 08:00:59 GMT</pubDate><ttl>60</ttl><item><title>《敏捷软件开发模型—Scrum》ppt</title><link>http://www.blogjava.net/rosen/archive/2010/01/04/308178.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Mon, 04 Jan 2010 07:13:00 GMT</pubDate><guid>http://www.blogjava.net/rosen/archive/2010/01/04/308178.html</guid><wfw:comment>http://www.blogjava.net/rosen/comments/308178.html</wfw:comment><comments>http://www.blogjava.net/rosen/archive/2010/01/04/308178.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosen/comments/commentRss/308178.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosen/services/trackbacks/308178.html</trackback:ping><description><![CDATA[前不久给部门内讲解时写的ppt，拿出来给大家拍一下，其实就是《硝烟中的Scrum和XP》的一个总结，以及平时和其他公司的朋友交流的来的经验。<br />
不一定这样做就能适合每个公司包括我们部门，希望能以此提炼出最适合的方式。<strong><a href="http://www.blogjava.net/Files/rosen/%E6%95%8F%E6%8D%B7%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E6%A8%A1%E5%9E%8B%E2%80%94Scrum.zip">点击这里下载</a></strong>。<br />
<br />
<br />
<span style="color: black; font-family: Arial;"><strong>
<font color="#ff0000" size="2">请注意！引用、转贴本文应注明原作者：Rosen Jiang 以及出处：</font>
</strong>
<a href="../../rosen/archive/2009/10/archive/2009/09/archive/2009/07/archive/2009/06/archive/2009/04/archive/2009/03/archive/2009/02/archive/2008/12/archive/2008/rosen">
<font color="#ff0000" face="宋体" size="2">
<strong>http://www.blogjava.net/rosen</strong></font></a></span><br />
<img src ="http://www.blogjava.net/rosen/aggbug/308178.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosen/" target="_blank">Rosen</a> 2010-01-04 15:13 <a href="http://www.blogjava.net/rosen/archive/2010/01/04/308178.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax轮询以及Comet模式—写在Servlet 3.0发布之前</title><link>http://www.blogjava.net/rosen/archive/2009/02/11/254309.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Wed, 11 Feb 2009 13:34:00 GMT</pubDate><guid>http://www.blogjava.net/rosen/archive/2009/02/11/254309.html</guid><wfw:comment>http://www.blogjava.net/rosen/comments/254309.html</wfw:comment><comments>http://www.blogjava.net/rosen/archive/2009/02/11/254309.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/rosen/comments/commentRss/254309.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosen/services/trackbacks/254309.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 2008								年的夏天，偶然在网上闲逛的时候发现了																		Comet														技术，人云亦云间，姑且认为它是由										Dojo								的										AlexRussell								在										2006								...&nbsp;&nbsp;<a href='http://www.blogjava.net/rosen/archive/2009/02/11/254309.html'>阅读全文</a><img src ="http://www.blogjava.net/rosen/aggbug/254309.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosen/" target="_blank">Rosen</a> 2009-02-11 21:34 <a href="http://www.blogjava.net/rosen/archive/2009/02/11/254309.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring 数据访问对象(Data Access Object,DAO)框架入门（翻译）</title><link>http://www.blogjava.net/rosen/archive/2007/02/28/101226.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Wed, 28 Feb 2007 13:47:00 GMT</pubDate><guid>http://www.blogjava.net/rosen/archive/2007/02/28/101226.html</guid><wfw:comment>http://www.blogjava.net/rosen/comments/101226.html</wfw:comment><comments>http://www.blogjava.net/rosen/archive/2007/02/28/101226.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/rosen/comments/commentRss/101226.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosen/services/trackbacks/101226.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 请注意！本文的译者是 rosenjiang！！！而不是 copy 自  BEA 译本！！！																		摘要						J2EE 应用中的业务组件普遍采用 JDBC API 访问和修改关系型数据库的持久化数据。这样做常常会把持久化代码和业务逻辑混合在一起，实在太糟糕了。数据访问对象(Data Access Object,DAO)设计模式针对这一问题把持...&nbsp;&nbsp;<a href='http://www.blogjava.net/rosen/archive/2007/02/28/101226.html'>阅读全文</a><img src ="http://www.blogjava.net/rosen/aggbug/101226.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosen/" target="_blank">Rosen</a> 2007-02-28 21:47 <a href="http://www.blogjava.net/rosen/archive/2007/02/28/101226.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>单点登陆(Single Sign-On,SSO)标准的范围（翻译）</title><link>http://www.blogjava.net/rosen/archive/2005/11/02/17873.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Wed, 02 Nov 2005 11:28:00 GMT</pubDate><guid>http://www.blogjava.net/rosen/archive/2005/11/02/17873.html</guid><wfw:comment>http://www.blogjava.net/rosen/comments/17873.html</wfw:comment><comments>http://www.blogjava.net/rosen/archive/2005/11/02/17873.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/rosen/comments/commentRss/17873.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosen/services/trackbacks/17873.html</trackback:ping><description><![CDATA[<P>单点登陆（Single Sign-On）标准的范围（在这里称做 XSSO），定义如下支持的服务：<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 为企业的应用开发提供通用的、单一的终端用户登陆接口，并且并行管理多用户帐号基础信息的应用开发是由企业来维护的。<BR>&nbsp;&nbsp;&nbsp; <BR><FONT size=5><STRONG>功能目标<BR></STRONG></FONT>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; <FONT size=4><STRONG>用户登陆接口<BR></STRONG></FONT>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 为实现用户登陆接口，XSSO 应该支持下列功能目标：<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 接口应该与验证信息的处理类型无关。<BR>&nbsp;&nbsp;&nbsp; 提供更改受控用户验证信息的功能。这意味着在最初更改用户密码会受到限制，当然不排除将来对其提供这种功能。<BR>&nbsp;&nbsp;&nbsp; 提供为调用者建立默认用户属性的支持。目前还不用从一组可用的用户属性选项来选择这些用户属性，当然不排除今后提供这种功能。<BR>&nbsp;&nbsp;&nbsp; 当会话终止、注销时提供默认的清除服务。<BR>&nbsp;&nbsp;&nbsp; 提供一种能让调用者通过从除该 XSSO 实现以外的应用通知 XSSO 实现改变受控用户验证信息的服务。<BR>&nbsp;&nbsp;&nbsp; XSSO 不能预先确定第二次登陆操作的时间。<BR>&nbsp;&nbsp;&nbsp; 注意：做为主登陆操作，意味着 XSSO 将不需要所有登陆操作同时执行。这将导致用户会话在所有可能的服务中被创建，即便某些服务用户并没有实际的使用。<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; <FONT size=4><STRONG>用户帐号管理接口</STRONG></FONT></P>
<P>为了实现用户帐号管理接口，XSSO 应该支持下列功能目标：<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 提供创建、删除、修改用户帐号的功能。<BR>&nbsp;&nbsp;&nbsp; 提供为单个用户帐号设置属性的功能。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR><STRONG><FONT size=5>非功能性目标</FONT></STRONG></P>
<P>XSSO 的非功能性目标包括：<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; XSSO 应该与验证技术无关。接口不能指定使用特定的验证技术，不排除使用任何可能的验证技术。&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 注意：有些验证技术，比如按照挑战响应机制，用户持有的设备构成将不会在第二次登陆动作时适用。<BR>&nbsp;&nbsp;&nbsp; XSSO 应该与平台或操作系统无关。不排除 XSSO 会集成进常规桌面或常用服务器系统，甚至大型机。当然，也可以修改一下 XSSO 再把它集成进那些桌面或服务器系统。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR><STRONG><FONT size=5>安全目标</FONT></STRONG></P>
<P>XSSO 实现的安全目标如下：<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 被部署之后，XSSO 不应反过来影响所依赖的系统。<BR>&nbsp;&nbsp;&nbsp; XSSO 不应有反过来冲击任何独立系统服务的可用性。<BR>&nbsp;&nbsp;&nbsp; XSSO 不应为当事人提供访问用户帐号信息的途径，因为他们不允许访问处于受控安全域之内的那些信息。<BR>&nbsp;&nbsp;&nbsp; 一个 XSSO 实现要审核发生在 XSSO 上下文之内的所有安全相关活动。<BR>&nbsp;&nbsp;&nbsp; 一个 XSSO 实现要保护由 XSSO 实现提供或产生的所有安全相关信息，以便其他服务充分信任这些安全信息的完整性和原始性，以便第二次登陆操作。<BR>&nbsp;&nbsp;&nbsp; 当在各个组件内部以及组件与其他服务交互时，XSSO 应提供安全相关信息保护。<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR><FONT size=5><STRONG>范围之外</STRONG></FONT></P>
<P>在当前的 XSSO 范围中，以下这些方面不被考虑：<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 提供跨越企业级系统边界的单点登陆。<BR>&nbsp;&nbsp;&nbsp; 非用户配置验证信息的改变，例如磁性徽章、智能卡等等。<BR>&nbsp;&nbsp;&nbsp; 当登陆时用户属性的可选择性。<BR>&nbsp;&nbsp;&nbsp; 配置和管理用户属性的可选集合（组）。<BR>&nbsp;&nbsp;&nbsp; 当下面的用户帐号基础信息由其他 XSSO 提供的功能所修改时，就需要维护单点登陆用户帐号基础信息以及下面独立维护的用户帐号基础信息的完整性。<BR>&nbsp;&nbsp;&nbsp; 图形化和命令行用户界面 XSSO 的基础服务。这个工具可以是 XSSO 的一部分。<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; <BR><FONT size=2><STRONG>译者注</STRONG></FONT></P>
<P><FONT size=2>典型的挑战响应机制应用在 HMAC(Keyed-Hashing for Message Authentication) 验证中。验证流程如下：<BR></FONT><FONT size=2><BR>&nbsp;&nbsp;&nbsp; (1) 先由客户端向服务器发出一个验证请求。 <BR>&nbsp;&nbsp;&nbsp; (2) 服务器接到此请求后生成一个随机数并通过网络传输给客户端（此为挑战）。 <BR>&nbsp;&nbsp;&nbsp; (3) 客户端将收到的随机数提供给 ePass，由 ePass 使用该随机数与存储在 ePass 中的密钥进行 HMAC-MD5 运算并得到一个结果作为认证证据传给服务器（此为响应）。 <BR>&nbsp;&nbsp;&nbsp; (4) 与此同时，服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行 HMAC-MD5 运算，如果服务器的运算结果与客户端传回的响应结果相同，则认为客户端是一个合法用户。</FONT><BR><BR><BR><STRONG><FONT face=宋体 color=#ff0000 size=2>请注意！引用、转贴本文应注明原译者：Rosen Jiang 以及出处：</FONT></STRONG><A href="/rosen/rosen/rosen/rosen"><FONT face=宋体 color=#ff0000 size=2><STRONG>http://www.blogjava.net/rosen</STRONG></FONT></A></P><img src ="http://www.blogjava.net/rosen/aggbug/17873.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosen/" target="_blank">Rosen</a> 2005-11-02 19:28 <a href="http://www.blogjava.net/rosen/archive/2005/11/02/17873.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>单点登陆(Single Sign-On,SSO)介绍（翻译）</title><link>http://www.blogjava.net/rosen/archive/2005/08/12/9876.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Fri, 12 Aug 2005 01:50:00 GMT</pubDate><guid>http://www.blogjava.net/rosen/archive/2005/08/12/9876.html</guid><wfw:comment>http://www.blogjava.net/rosen/comments/9876.html</wfw:comment><comments>http://www.blogjava.net/rosen/archive/2005/08/12/9876.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rosen/comments/commentRss/9876.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosen/services/trackbacks/9876.html</trackback:ping><description><![CDATA[<P>&nbsp;&nbsp;&nbsp; 随着 IT 系统所支撑的业务程序的激增，用户和系统管理者都面对同一个日益复杂的，进行作业功能操作的界面。典型情况下，用户不得不在多个系统上进行登陆，这将迫使同一个登陆对话框多次出现，每个系统都调用不同的用户名和验证信息。而系统管理者则面临在每个系统管理用户帐号，并为了以一种协同的方式访问而维持完整的强制安全策略。对于用户这种采用遗传方式登陆到多系统的说明如下：</P>
<P><IMG alt="" src="http://www.opengroup.org/security/image/ssofig1_1.gif"><BR>&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;<STRONG>采用遗传方式的用户登陆多系统</STRONG></P>
<P>&nbsp;&nbsp;&nbsp; 在历史上，一个分布式计算机系统由各个组件作为独立安全域装配而成。这些组件由包含关联操作系统和应用程序的独立平台组成。<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 这些组件作为官能上的独立域，终端用户必须自己独立辨别和验证他想要交互的那些域。该场景在上图已有说明。终端用户最初通过和主域（Primary Domain）交互来建立会话。在上图中被称做主域登陆（Primary Domain Sign-On），并且需要终端用户提供一组可用的用户信息，例如用户名和密码。主域会话典型的由操作系统会话外壳在代表终端用户环境的终端用户机器上运行获得的（比如：程序属性，环境变量和根目录）。通过主域会话外壳，用户可以调用其他的域服务，比如平台或应用程序。<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 要调用二级域（Secondary Domain）服务，终端用户需要进行二级域登陆（Secondary Domain Sign-on）。并要求终端用户再次提供用户信息，终端用户不得不引导一个独立的登陆对话框进行验证。二级域会话是典型的操作系统外壳或程序外壳，再一次代表终端用户环境。从管理的角度上看，采用遗传方式需要独立的管理每个域，而且是多用户帐户管理界面。权衡可用性和安全上的考量，需要在企业中为多个不同域部署一种协同机制以及可集成的用户登陆功能以及用户帐号管理功能。提供这种协同和集成的服务有益于为企业提供真实的开销，通过：<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 减少用户登陆到独立域花费的操作时间，同时也降低了进行登陆操作时失败的机率。<BR>&nbsp;&nbsp;&nbsp; 通过减少必要的用户句柄和记住多组认证消息，增强了安全性。<BR>&nbsp;&nbsp;&nbsp; 减少了时间的花费，改善了响应，通过系统管理员为系统增加、删除、修改用户访问权。<BR>&nbsp;&nbsp;&nbsp; 通过增强系统管理员维护用户帐号配置的完整性，来改善安全。采用协同一致的方式禁止或取消独立用户访问所有系统资源。</P>
<P><IMG alt="" src="http://www.opengroup.org/security/image/ssofig1_2.gif"><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; <STRONG>单用户登陆到多用户</STRONG></P>
<P><STRONG></STRONG><BR>&nbsp;&nbsp;&nbsp; 这种服务被称做单点登陆（Single Sign-On）。不管怎样，该服务对于终端用户和管理方面都同样重要。这种方式在上图中有所体现。在单点登陆方式，系统必须从用户收集数据，作为主登陆的一部分，所有的身份和用户信息必须提供给用户验证系统，以便每个二级域进行潜在的交互。<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 这些信息由终端用户作为主域登陆过程的一部分提供，可在下面几个方面为二级域提供登陆：<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 直接方式，用户提供的信息直接作为二级域的第二次登陆的一部分。<BR>&nbsp;&nbsp;&nbsp; 间接方式，用户提供的信息被用于找回存储在单点登陆管理数据库上的其他用户的标识和用户信息。取回的信息接着被用于基本的二级域登陆操作。<BR>&nbsp;&nbsp;&nbsp; 立即方式，与二级域建立会话作为初始会话的确立。意味着程序的客户将在第一次登陆操作时同时自动调用并建立通信。<BR>&nbsp;&nbsp;&nbsp; 临时存储或缓存，应用于终端用户偶尔请求二级域服务的情况。<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 从管理的角度来看，单点登陆模式提供一种单一用户管理界面，所有的组件域将以协同和同步的方式管理。<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 单点登陆模式在安全方面的重要意义在于：<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 二级域与主域的信任关系：<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 正确地断言终端用户的身份和验证信息。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 保护为使用未经许可的二级域而验证终端用户身份的验证信息。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 当主、从域之间通讯受到威胁，比如中途拦截或丢失（eavsdropping）引起可能的伪装攻击，验证信息应被保护起来。<BR><BR><BR><STRONG><FONT color=#ff0000 size=2>请注意！引用、转贴本文应注明原译者：Rosen Jiang 以及出处：</FONT></STRONG><A href="http://www.blogjava.net/rosen"><STRONG><FONT color=#ff0000 size=2>http://www.blogjava.net/rosen</FONT></STRONG></A></P><img src ="http://www.blogjava.net/rosen/aggbug/9876.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosen/" target="_blank">Rosen</a> 2005-08-12 09:50 <a href="http://www.blogjava.net/rosen/archive/2005/08/12/9876.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用 Spring 和 EHCache 缓存结果（翻译）</title><link>http://www.blogjava.net/rosen/archive/2005/08/12/9873.html</link><dc:creator>Rosen</dc:creator><author>Rosen</author><pubDate>Fri, 12 Aug 2005 01:41:00 GMT</pubDate><guid>http://www.blogjava.net/rosen/archive/2005/08/12/9873.html</guid><wfw:comment>http://www.blogjava.net/rosen/comments/9873.html</wfw:comment><comments>http://www.blogjava.net/rosen/archive/2005/08/12/9873.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/rosen/comments/commentRss/9873.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rosen/services/trackbacks/9873.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span>
						<strong>
								<b style="mso-bidi-font-weight: normal">
										<span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">导言</span>
								</b>
								<b style="mso-bidi-font-weight: normal">
										<span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: Arial">
												<p>
												</p>
										</span>
								</b>
						</strong>
				</span>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">从</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">Spring 1.1.1 </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">开始，</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">
						<a href="http://ehcache.sourceforge.net/">EHCache</a>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">就作为一种通用缓存解决方案集成进</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">Spring</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">。</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">
						<p>
						</p>
				</span>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">我将示范拦截器的例子，它能把方法返回的结果缓存起来。</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">
						<br />
						<br />
				</span>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">
								<br />利用</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: Arial">Spring IoC </span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">配置</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: Arial">EHCache 
<p></p></span>
				</b>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">在</span>
				<span style="FONT-FAMILY: Arial">
						<span lang="EN-US">Spring </span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">里配置</span>
				<span style="FONT-FAMILY: Arial">
						<span lang="EN-US">EHCache </span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">很简单。你只需一个</span>
				<span style="FONT-FAMILY: Arial">
						<span lang="EN-US">ehcache.xml </span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">文件，该文件用于配置</span>
				<span style="FONT-FAMILY: Arial">
						<span lang="EN-US">EHCache</span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">：</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">
				</span>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="FONT-FAMILY: Arial">
						<p>
						</p>
						<table style="WIDTH: 527px; HEIGHT: 593px" height="593" cellspacing="0" cellpadding="0" width="527" border="1">
								<tbody>
										<tr>
												<td>
														<p>
																<font face="Times New Roman" size="2">&lt;ehcache&gt;</font>
														</p>
														<p>
																<font face="Times New Roman" size="2">    &lt;!—设置缓存文件 .data 的创建路径。</font>
														</p>
														<p>
																<font face="Times New Roman" size="2">         如果该路径是 Java 系统参数，当前虚拟机会重新赋值。</font>
														</p>
														<p>
																<font face="Times New Roman" size="2">         下面的参数这样解释：<br />         user.home – 用户主目录<br />         user.dir      – 用户当前工作目录<br />         java.io.tmpdir – 默认临时文件路径 --&gt;<br />    &lt;diskStore path="java.io.tmpdir"/&gt;</font>
														</p>
														<p>
																<br />
																<font face="Times New Roman" size="2">    &lt;!—缺省缓存配置。CacheManager 会把这些配置应用到程序中。</font>
														</p>
														<p>
																<font face="Times New Roman" size="2">        下列属性是 defaultCache 必须的：</font>
														</p>
														<p>
																<font face="Times New Roman" size="2">        maxInMemory           - 设定内存中创建对象的最大值。<br />        eternal                        - 设置元素（译注：内存中对象）是否永久驻留。如果是，将忽略超<br />                                              时限制且元素永不消亡。<br />        timeToIdleSeconds  - 设置某个元素消亡前的停顿时间。<br />                                              也就是在一个元素消亡之前，两次访问时间的最大时间间隔值。<br />                                              这只能在元素不是永久驻留时有效（译注：如果对象永恒不灭，则<br />                                              设置该属性也无用）。<br />                                              如果该值是 0 就意味着元素可以停顿无穷长的时间。<br />        timeToLiveSeconds - 为元素设置消亡前的生存时间。<br />                                               也就是一个元素从构建到消亡的最大时间间隔值。<br />                                               这只能在元素不是永久驻留时有效。<br />        overflowToDisk        - 设置当内存中缓存达到 maxInMemory 限制时元素是否可写到磁盘<br />                                               上。<br />        --&gt;</font>
														</p>
														<p>
																<font face="Times New Roman" size="2">    &lt;cache name="org.taha.cache.METHOD_CACHE"<br />        maxElementsInMemory="300"<br />        eternal="false"<br />        timeToIdleSeconds="500"<br />        timeToLiveSeconds="500"<br />        overflowToDisk="true"<br />        /&gt;<br />&lt;/ehcache&gt;</font>
														</p>
												</td>
										</tr>
								</tbody>
						</table>
				</span> 
</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">拦截器将使用</span>
				<span style="FONT-FAMILY: Arial">
						<span lang="EN-US">”<b>org.taha.cache.METHOD_CACHE</b>” </span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">区域缓存方法返回结果。下面利用</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">Spring IoC </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">让</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">bean </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">来访问这一区域。</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">
				</span>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="FONT-FAMILY: Arial">
						<p>
						</p>
						<table style="WIDTH: 525px; HEIGHT: 249px" height="249" cellspacing="0" cellpadding="0" width="525" border="1">
								<tbody>
										<tr>
												<td>
														<p>
																<font face="Times New Roman" size="2">&lt;!-- ======================   缓存   ======================= --&gt;</font>
														</p>
														<p>
																<font face="Times New Roman" size="2">&lt;bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"&gt;<br />  &lt;property name="configLocation"&gt;<br />    &lt;value&gt;classpath:ehcache.xml&lt;/value&gt;<br />  &lt;/property&gt;<br />&lt;/bean&gt;</font>
														</p>
														<p>
																<font face="Times New Roman" size="2">&lt;bean id="methodCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean"&gt;<br />  &lt;property name="cacheManager"&gt;<br />    &lt;ref local="cacheManager"/&gt;<br />  &lt;/property&gt;<br />  &lt;property name="cacheName"&gt;<br />    &lt;value&gt;org.taha.cache.METHOD_CACHE&lt;/value&gt;<br />  &lt;/property&gt;<br />&lt;/bean&gt;</font>
														</p>
												</td>
										</tr>
								</tbody>
						</table> </span>  
</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">构建我们的</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 14pt; FONT-FAMILY: Arial">
								<span lang="EN-US">MethodCacheInterceptor</span>
						</span>
				</b>
				<span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">
						<p>
						</p>
				</span>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">该拦截器实现</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">
						<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: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">接口。一旦</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">运行起来</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">(kicks-in)</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">，它首先检查被拦截方法是否被配置为可缓存的。这将可选择性的配置想要缓存的</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">bean </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">方法。只要调用的方法配置为可缓存，拦截器将为该方法生成</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">cache key </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">并检查该方法返回的结果是否已缓存。如果已缓存，就返回缓存的结果，否则再次调用被拦截方法，并缓存结果供下次调用。</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial">
				</span>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">org.taha.interceptor.MethodCacheInterceptor </span>
				</b>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">
						<p>
						</p>
						<table style="WIDTH: 528px; HEIGHT: 100px" height="100" cellspacing="0" cellpadding="0" width="528" border="1">
								<tbody>
										<tr>
												<td>
														<p>
																<font face="Times New Roman" size="2">/*<br /> * Copyright 2002-2004 the original author or authors.<br /> *<br /> * Licensed under the Apache License, Version 2.0 (the "License");<br /> * you may not use this file except in compliance with the License.<br /> * You may obtain a copy of the License at<br /> *<br /> *      </font>
																<a href="http://www.apache.org/licenses/LICENSE-2.0">
																		<font face="Times New Roman" size="2">http://www.apache.org/licenses/LICENSE-2.0</font>
																</a>
																<br />
																<font face="Times New Roman" size="2"> *<br /> * Unless required by applicable law or agreed to in writing, software<br /> * distributed under the License is distributed on an "AS IS" BASIS,<br /> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<br /> * See the License for the specific language governing permissions and<br /> * limitations under the License.<br /> */</font>
														</p>
														<p>
																<font face="Times New Roman" size="2">package org.taha.interceptor;</font>
														</p>
														<p>
																<font face="Times New Roman" size="2">import java.io.Serializable;</font>
														</p>
														<p>
																<font face="Times New Roman" size="2">import org.aopalliance.intercept.MethodInterceptor;<br />import org.aopalliance.intercept.MethodInvocation;</font>
														</p>
														<p>
																<font face="Times New Roman" size="2">import org.apache.commons.logging.LogFactory;<br />import org.apache.commons.logging.Log;</font>
														</p>
														<p>
																<font face="Times New Roman" size="2">import org.springframework.beans.factory.InitializingBean;<br />import org.springframework.util.Assert;</font>
														</p>
														<p>
																<font face="Times New Roman" size="2">import net.sf.ehcache.Cache;<br />import net.sf.ehcache.Element;</font>
														</p>
														<p>
																<font face="Times New Roman" size="2">/**<br /> * @author &lt;a href="</font>
																<a href="mailto:irbouh@gmail.com&quot;&gt;Omar" temp_href="mailto:irbouh@gmail.com&quot;&gt;Omar">
																		<font face="Times New Roman" size="2">mailto:irbouh@gmail.com"&gt;Omar</font>
																</a>
																<font face="Times New Roman" size="2">Irbouh&lt;/a&gt;<br /> * @since 2004.10.07<br /> */<br />public class MethodCacheInterceptor implements MethodInterceptor, InitializingBean {<br />  private static final Log logger = LogFactory.getLog(MethodCacheInterceptor.class);</font>
														</p>
														<p>
																<font face="Times New Roman" size="2">  private Cache cache;</font>
														</p>
														<p>
																<font face="Times New Roman" size="2">  /**<br />   * 设置缓存名<br />   */<br />  public void setCache(Cache cache) {<br />    this.cache = cache;<br />  }</font>
														</p>
														<p>
																<font face="Times New Roman" size="2">  /**<br />   * 检查是否提供必要参数。<br />   */<br />  public void afterPropertiesSet() throws Exception {<br />    Assert.notNull(cache, "A cache is required. Use setCache(Cache) to provide one.");<br />  }</font>
														</p>
														<p>
																<font face="Times New Roman" size="2">  /**<br />   * 主方法<br />   * 如果某方法可被缓存就缓存其结果<br />   * 方法结果必须是可序列化的(serializable)<br />   */<br />  public Object invoke(MethodInvocation invocation) throws Throwable {<br />    String targetName  = invocation.getThis().getClass().getName();<br />    String methodName  = invocation.getMethod().getName();<br />    Object[] arguments = invocation.getArguments();<br />    Object result;</font>
														</p>
														<p>
																<font face="Times New Roman" size="2">    logger.debug("looking for method result in cache");<br />    String cacheKey = getCacheKey(targetName, methodName, arguments);<br />    Element element = cache.get(cacheKey);<br />    if (element == null) {<br />      //call target/sub-interceptor<br />      logger.debug("calling intercepted method");<br />      result = invocation.proceed();</font>
														</p>
														<p>
																<font face="Times New Roman" size="2">      //cache method result<br />      logger.debug("caching result");<br />      element = new Element(cacheKey, (Serializable) result);<br />      cache.put(element);<br />    }<br />    return element.getValue();<br />  }</font>
														</p>
														<p>
																<font face="Times New Roman" size="2">  /**<br />   * creates cache key: targetName.methodName.argument0.argument1...<br />   */<br />  private String getCacheKey(String targetName,<br />                             String methodName,<br />                             Object[] arguments) {<br />    StringBuffer sb = new StringBuffer();<br />    sb.append(targetName)<br />      .append(".").append(methodName);<br />    if ((arguments != null) &amp;&amp; (arguments.length != 0)) {<br />      for (int i=0; i&lt;arguments.length; i++) {<br />        sb.append(".")<br />          .append(arguments[i]);<br />      }<br />    }</font>
														</p>
														<p>
																<font face="Times New Roman" size="2">    return sb.toString();<br />  }<br />}</font>
														</p>
												</td>
										</tr>
								</tbody>
						</table>
				</span> 
</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">MethodCacheInterceptor </span>
				<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">代码说明了：</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">
						<p>
						</p>
				</span>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<ul type="square">
				<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">默认条件下，所有方法返回结果都被缓存了（</span>
						<span lang="EN-US" style="FONT-FAMILY: Arial">methodNames </span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">是</span>
						<span lang="EN-US" style="FONT-FAMILY: Arial">null</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">）</span>
						<span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">
								<p>
								</p>
						</span>
				</li>
				<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">缓存区利用</span>
						<span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">IoC </span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">形成</span>
						<span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">
								<p>
								</p>
						</span>
				</li>
				<li class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
						<span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">cacheKey </span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的生成还包括方法参数的因素（译注：参数的改变会影响</span>
						<span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">cacheKey</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">）</span>
						<span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">
								<p>
								</p>
						</span>
				</li>
		</ul>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">使用</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: Arial">MethodCacheInterceptor</span>
				</b>
				<span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">
						<p>
						</p>
				</span>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">下面摘录了怎样配置</span>
				<span style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">
						<span lang="EN-US">MethodCacheInterceptor</span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">：</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">
				</span>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<p>
						</p>
						<table style="WIDTH: 528px; HEIGHT: 445px" height="445" cellspacing="0" cellpadding="0" width="528" border="1">
								<tbody>
										<tr>
												<td>
														<p>
																<font size="2">&lt;bean id="methodCacheInterceptor" class="org.taha.interceptor.MethodCacheInterceptor"&gt;<br />  &lt;property name="cache"&gt;<br />    &lt;ref local="methodCache" /&gt;<br />  &lt;/property&gt;<br />&lt;/bean&gt;</font>
														</p>
														<p>
																<font size="2">&lt;bean id="methodCachePointCut" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"&gt;<br />  &lt;property name="advice"&gt;<br />    &lt;ref local="methodCacheInterceptor"/&gt;<br />  &lt;/property&gt;<br />  &lt;property name="patterns"&gt;<br />    &lt;list&gt;<br />      &lt;value&gt;.*methodOne&lt;/value&gt;<br />      &lt;value&gt;.*methodTwo&lt;/value&gt;<br />    &lt;/list&gt;<br />  &lt;/property&gt;<br />&lt;/bean&gt;</font>
														</p>
														<p>
																<font size="2">&lt;bean id="myBean" class="org.springframework.aop.framework.ProxyFactoryBean"&gt;<br />  &lt;property name="target"&gt;<br />   &lt;bean class="org.taha.beans.MyBean"/&gt;<br />  &lt;/property&gt;<br />  &lt;property name="interceptorNames"&gt;<br />    &lt;list&gt;<br />      &lt;value&gt;methodCachePointCut&lt;/value&gt;<br />    &lt;/list&gt;<br />  &lt;/property&gt;<br />&lt;/bean&gt;</font>
														</p>
												</td>
										</tr>
								</tbody>
						</table>
				</span>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">译注</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt">
								<br />
								<p>
								</p>
						</span>
				</b>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">如果你要缓存的方法是 findXXX，那么正则表达式应该这样写：“.*find.*”。<br /><br />夏昕所著《</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">Hibernate </span>
				<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">开发指南》，其中他这样描述</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">EHCache </span>
				<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">配置文件的：</span>
				<span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">
				</span>
		</p>
		<p>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">
						<p>
						</p>
						<table style="WIDTH: 526px; HEIGHT: 100px" height="100" cellspacing="0" cellpadding="0" width="526" border="1">
								<tbody>
										<tr>
												<td>
														<font face="Times New Roman" size="2">&lt;ehcache&gt;<br />    &lt;diskStore path="java.io.tmpdir"/&gt;<br />    &lt;defaultCache<br />        maxElementsInMemory="10000" //Cache中最大允许保存的数据数量<br />        eternal="false"                       //Cache中数据是否为常量<br />        timeToIdleSeconds="120"     //缓存数据钝化时间<br />        timeToLiveSeconds="120"     //缓存数据的生存时间<br />        overflowToDisk="true"       //内存不足时，是否启用磁盘缓存<br />    /&gt;<br />&lt;/ehcache&gt;</font>
												</td>
										</tr>
								</tbody>
						</table> <br /><br /><strong><font color="#ff0000" size="2">请注意！引用、转贴本文应注明原译者：Rosen Jiang 以及出处：</font></strong><a href="/rosen"><strong><font color="#ff0000" size="2">http://www.blogjava.net/rosen</font></strong></a><br /><br /><br /></span>
		</p>
		<p>
		</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">    </span>
				<span style="COLOR: #008000">&lt;!--</span>
				<span style="COLOR: #008000"> EHCache </span>
				<span style="COLOR: #008000">--&gt;</span>
				<span style="COLOR: #000000">
						<br />    </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">bean </span>
				<span style="COLOR: #ff0000">id</span>
				<span style="COLOR: #0000ff">="cacheManager"</span>
				<span style="COLOR: #ff0000"> class</span>
				<span style="COLOR: #0000ff">="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />        </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="configLocation"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />            </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 />        </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">property</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />    </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 />    </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">bean </span>
				<span style="COLOR: #ff0000">id</span>
				<span style="COLOR: #0000ff">="methodCache"</span>
				<span style="COLOR: #ff0000"> class</span>
				<span style="COLOR: #0000ff">="org.springframework.cache.ehcache.EhCacheFactoryBean"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />        </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="cacheManager"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />            </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">ref </span>
				<span style="COLOR: #ff0000">local</span>
				<span style="COLOR: #0000ff">="cacheManager"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />        </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">property</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />        </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="cacheName"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />            </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 />        </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">property</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />    </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 />    </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">bean </span>
				<span style="COLOR: #ff0000">id</span>
				<span style="COLOR: #0000ff">="methodCacheInterceptor"</span>
				<span style="COLOR: #ff0000"> class</span>
				<span style="COLOR: #0000ff">="com.cdmcs.util.MethodCacheInterceptor"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000"> <br />        </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="cache"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />            </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">ref </span>
				<span style="COLOR: #ff0000">local</span>
				<span style="COLOR: #0000ff">="methodCache"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />        </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">property</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />    </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 />    </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">bean </span>
				<span style="COLOR: #ff0000">id</span>
				<span style="COLOR: #0000ff">="cleanCacheAdvice"</span>
				<span style="COLOR: #ff0000"> class</span>
				<span style="COLOR: #0000ff">="com.cdmcs.util.CleanCacheAdvice"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000"> <br />        </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="cache"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />            </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">ref </span>
				<span style="COLOR: #ff0000">local</span>
				<span style="COLOR: #0000ff">="methodCache"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />        </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">property</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />    </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 />    </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">bean </span>
				<span style="COLOR: #ff0000">id</span>
				<span style="COLOR: #0000ff">="advicePointCut"</span>
				<span style="COLOR: #ff0000"> class</span>
				<span style="COLOR: #0000ff">="org.springframework.aop.support.RegexpMethodPointcutAdvisor"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />        </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="advice"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />            </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">ref </span>
				<span style="COLOR: #ff0000">local</span>
				<span style="COLOR: #0000ff">="cleanCacheAdvice"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />        </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">property</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />        </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="patterns"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />            </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">list</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />                </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 />                </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 />                </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 />                </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 />            </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">list</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />        </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">property</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />    </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 />    </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">bean </span>
				<span style="COLOR: #ff0000">id</span>
				<span style="COLOR: #0000ff">="methodCachePointCut"</span>
				<span style="COLOR: #ff0000"> class</span>
				<span style="COLOR: #0000ff">="org.springframework.aop.support.RegexpMethodPointcutAdvisor"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />        </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="advice"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />            </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">ref </span>
				<span style="COLOR: #ff0000">local</span>
				<span style="COLOR: #0000ff">="methodCacheInterceptor"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />        </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">property</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />        </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="patterns"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />            </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">list</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />                </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 />            </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">list</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />        </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">property</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />    </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 />   </span>
				<span style="COLOR: #008000">&lt;!--</span>
				<span style="COLOR: #008000"> EHCache End</span>
				<span style="COLOR: #008000">--&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<br />    </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">bean </span>
				<span style="COLOR: #ff0000">id</span>
				<span style="COLOR: #0000ff">="supplyDemandService"</span>
				<span style="COLOR: #ff0000"> parent</span>
				<span style="COLOR: #0000ff">="baseTransactionProxy"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000"> <br />        </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="target"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000"> <br />            </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">bean </span>
				<span style="COLOR: #ff0000">class</span>
				<span style="COLOR: #0000ff">="com.cdmcs.webbuilder.service.impl.SupplyDemandServiceImpl"</span>
				<span style="COLOR: #ff0000"> autowire</span>
				<span style="COLOR: #0000ff">="byName"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000"> <br />        </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">property</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000"> <br />        </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="preInterceptors"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />        </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">list</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />            </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">ref </span>
				<span style="COLOR: #ff0000">bean</span>
				<span style="COLOR: #0000ff">="methodCachePointCut"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />            </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">ref </span>
				<span style="COLOR: #ff0000">bean</span>
				<span style="COLOR: #0000ff">="advicePointCut"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />        </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">list</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />        </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">property</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />    </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">bean</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000"> </span>
		</div>
<img src ="http://www.blogjava.net/rosen/aggbug/9873.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rosen/" target="_blank">Rosen</a> 2005-08-12 09:41 <a href="http://www.blogjava.net/rosen/archive/2005/08/12/9873.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>