﻿<?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-最爱Java-随笔分类-《AspectJ Cookbook》读书笔记</title><link>http://www.blogjava.net/zhengzhili/category/32514.html</link><description>书山有路勤为径，学海无涯苦作舟</description><language>zh-cn</language><lastBuildDate>Fri, 29 Aug 2008 08:17:42 GMT</lastBuildDate><pubDate>Fri, 29 Aug 2008 08:17:42 GMT</pubDate><ttl>60</ttl><item><title>《AspectJ Cookbook中文版》的附带示例下载</title><link>http://www.blogjava.net/zhengzhili/archive/2008/08/29/225599.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Fri, 29 Aug 2008 08:14:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2008/08/29/225599.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/225599.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2008/08/29/225599.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/225599.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/225599.html</trackback:ping><description><![CDATA[<p><a title="附带示例" href="/Files/zhengzhili/aspectjcookbook_examples.zip">附带示例</a>&nbsp;<br />
<br />
也可以从<a href="http:/www.oreilly.com.cn/book.php?bn=7-302-14011-1">http:/www.oreilly.com.cn/book.php?bn=7-302-14011-1</a>查询</p>
 <img src ="http://www.blogjava.net/zhengzhili/aggbug/225599.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2008-08-29 16:14 <a href="http://www.blogjava.net/zhengzhili/archive/2008/08/29/225599.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《AspectJ Cookbook》读书笔记六: 捕获通知上的连接点</title><link>http://www.blogjava.net/zhengzhili/archive/2008/08/29/225596.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Fri, 29 Aug 2008 08:09:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2008/08/29/225596.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/225596.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2008/08/29/225596.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/225596.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/225596.html</trackback:ping><description><![CDATA[<strong>一. 捕获何时执行通知<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong>使用adviceexecution()切入点。adviceexecution()切入点的语法如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointcut &lt;pointcut name&gt;() : adviceexecution();<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;AdviceExecutionRecipe&nbsp;<br />
<img id="Codehighlighter1_59_761_Open_Image" onclick="this.style.display='none'; Codehighlighter1_59_761_Open_Text.style.display='none'; Codehighlighter1_59_761_Closed_Image.style.display='inline'; Codehighlighter1_59_761_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_59_761_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_59_761_Closed_Text.style.display='none'; Codehighlighter1_59_761_Open_Image.style.display='inline'; Codehighlighter1_59_761_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_59_761_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_59_761_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_64_128_Open_Image" onclick="this.style.display='none'; Codehighlighter1_64_128_Open_Text.style.display='none'; Codehighlighter1_64_128_Closed_Image.style.display='inline'; Codehighlighter1_64_128_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_64_128_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_64_128_Closed_Text.style.display='none'; Codehighlighter1_64_128_Open_Image.style.display='inline'; Codehighlighter1_64_128_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_64_128_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">/**/</span><span id="Codehighlighter1_64_128_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;whenever&nbsp;advice&nbsp;is&nbsp;executed<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;pointcut&nbsp;adviceExecutionPointcut()&nbsp;:&nbsp;adviceexecution();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;before()&nbsp;:&nbsp;adviceExecutionPointcut()<br />
<img id="Codehighlighter1_258_759_Open_Image" onclick="this.style.display='none'; Codehighlighter1_258_759_Open_Text.style.display='none'; Codehighlighter1_258_759_Closed_Image.style.display='inline'; Codehighlighter1_258_759_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_258_759_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_258_759_Closed_Text.style.display='none'; Codehighlighter1_258_759_Open_Image.style.display='inline'; Codehighlighter1_258_759_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_258_759_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_258_759_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">-------------------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;--------------------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;picked&nbsp;by&nbsp;ExecutionRecipe</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Signature:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getStaticPart().getSignature());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Source&nbsp;Line:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getStaticPart().getSourceLocation());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">------------------------------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
<strong>二. 排出作为通知执行结果的连接点<br />
三. 在发出通知时展示原始连接点<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong>添加JoinPoint标识符到切入点定义中。<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.aspectj.lang.JoinPoint;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;AdviceExecutionRecipe&nbsp;<br />
<img id="Codehighlighter1_95_1081_Open_Image" onclick="this.style.display='none'; Codehighlighter1_95_1081_Open_Text.style.display='none'; Codehighlighter1_95_1081_Closed_Image.style.display='inline'; Codehighlighter1_95_1081_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_95_1081_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_95_1081_Closed_Text.style.display='none'; Codehighlighter1_95_1081_Open_Image.style.display='inline'; Codehighlighter1_95_1081_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_95_1081_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_95_1081_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_100_164_Open_Image" onclick="this.style.display='none'; Codehighlighter1_100_164_Open_Text.style.display='none'; Codehighlighter1_100_164_Closed_Image.style.display='inline'; Codehighlighter1_100_164_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_100_164_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_100_164_Closed_Text.style.display='none'; Codehighlighter1_100_164_Open_Image.style.display='inline'; Codehighlighter1_100_164_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_100_164_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">/**/</span><span id="Codehighlighter1_100_164_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;whenever&nbsp;advice&nbsp;is&nbsp;executed<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;pointcut&nbsp;adviceExecutionPointcut(JoinPoint&nbsp;originalJoinPoint)&nbsp;:&nbsp;adviceexecution()&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;args(originalJoinPoint)&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">within(AdviceExecutionRecipe);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;before(JoinPoint&nbsp;originalJoinPoint)&nbsp;:&nbsp;adviceExecutionPointcut(originalJoinPoint)<br />
<img id="Codehighlighter1_426_1079_Open_Image" onclick="this.style.display='none'; Codehighlighter1_426_1079_Open_Text.style.display='none'; Codehighlighter1_426_1079_Closed_Image.style.display='inline'; Codehighlighter1_426_1079_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_426_1079_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_426_1079_Closed_Text.style.display='none'; Codehighlighter1_426_1079_Open_Image.style.display='inline'; Codehighlighter1_426_1079_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_426_1079_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_426_1079_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">-------------------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;--------------------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;picked&nbsp;by&nbsp;AdviceExecutionRecipe</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Signature:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getStaticPart().getSignature());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Source&nbsp;Line:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getStaticPart().getSourceLocation());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Advised&nbsp;Advice's&nbsp;Join&nbsp;Point&nbsp;Signature:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;originalJoinPoint.getSignature());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">------------------------------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
&nbsp;
<img src ="http://www.blogjava.net/zhengzhili/aggbug/225596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2008-08-29 16:09 <a href="http://www.blogjava.net/zhengzhili/archive/2008/08/29/225596.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《AspectJ Cookbook》读书笔记二十二: 应用企业级方面 </title><link>http://www.blogjava.net/zhengzhili/archive/2008/08/29/225545.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Fri, 29 Aug 2008 07:47:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2008/08/29/225545.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/225545.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2008/08/29/225545.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/225545.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/225545.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一. 应用开发指导和规则&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;想通过提供一种在编译时强制执行的策略，来控制在应用程序中允许哪些程序构造。可使用Border Controller(边界控制器)面向方面设计模式声明代码内的一组区域。当依据策略模式在方面中为项目声明任何顶级规则时，重用这些区域。可以扩展项目的顶级策略，为应用程序的特定区域特殊...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhengzhili/archive/2008/08/29/225545.html'>阅读全文</a><img src ="http://www.blogjava.net/zhengzhili/aggbug/225545.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2008-08-29 15:47 <a href="http://www.blogjava.net/zhengzhili/archive/2008/08/29/225545.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《AspectJ Cookbook》读书笔记二十一: 应用应用程序级方面</title><link>http://www.blogjava.net/zhengzhili/archive/2008/08/29/225544.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Fri, 29 Aug 2008 06:24:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2008/08/29/225544.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/225544.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2008/08/29/225544.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/225544.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/225544.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;应用程序级方面会影响软件相当多的区域，他们通常是软件的特征，将会影响应用程序中的许多类。本节介绍系统级的横切关注点集合，其中可以使用AspectJ更好地实现它们的特征。本节可以分成两类：被动方面和主动方面。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhengzhili/archive/2008/08/29/225544.html'>阅读全文</a><img src ="http://www.blogjava.net/zhengzhili/aggbug/225544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2008-08-29 14:24 <a href="http://www.blogjava.net/zhengzhili/archive/2008/08/29/225544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《AspectJ Cookbook》读书笔记二十: 应用类和组件级方面</title><link>http://www.blogjava.net/zhengzhili/archive/2008/08/29/225494.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Fri, 29 Aug 2008 03:18:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2008/08/29/225494.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/225494.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2008/08/29/225494.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/225494.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/225494.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一.验证传递给方法的参数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;创建一个模块化参数检查逻辑的方面。声明一个切入点，用于捕获其中将检查参数的方法的执行。切入点应该把参数展示给相应的通知使得它可以执行检查。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;依赖于参数检查的结果，通知将继续执行方...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhengzhili/archive/2008/08/29/225494.html'>阅读全文</a><img src ="http://www.blogjava.net/zhengzhili/aggbug/225494.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2008-08-29 11:18 <a href="http://www.blogjava.net/zhengzhili/archive/2008/08/29/225494.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《AspectJ Cookbook》读书笔记十九: 实现行为型面向对象设计模式 </title><link>http://www.blogjava.net/zhengzhili/archive/2008/08/29/225304.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Fri, 29 Aug 2008 02:04:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2008/08/29/225304.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/225304.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2008/08/29/225304.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/225304.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/225304.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一.实现观察者模式&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;观察者模式允许设计者创建对象之间的依赖关系，使得如果一个对象的状态发生变化，则通知另一个对象，并且它可能会产生相应的行动。package&nbsp;com.aspectj;import&nbsp;java.util.List;import&nbsp;java.uti...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhengzhili/archive/2008/08/29/225304.html'>阅读全文</a><img src ="http://www.blogjava.net/zhengzhili/aggbug/225304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2008-08-29 10:04 <a href="http://www.blogjava.net/zhengzhili/archive/2008/08/29/225304.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《AspectJ Cookbook》读书笔记十八: 实现结构型面向对象设计模式 </title><link>http://www.blogjava.net/zhengzhili/archive/2008/08/28/225205.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Thu, 28 Aug 2008 02:49:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2008/08/28/225205.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/225205.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2008/08/28/225205.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/225205.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/225205.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一.实现复合模式&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;复合模式能够把集合中的对象组合在一起，并且以某种方式与整个组交互，这种交互式类似于同组中的单个成员进行交互。package&nbsp;com.aspectj;import&nbsp;java.util.Enumeration;import&nbsp;java.util...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhengzhili/archive/2008/08/28/225205.html'>阅读全文</a><img src ="http://www.blogjava.net/zhengzhili/aggbug/225205.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2008-08-28 10:49 <a href="http://www.blogjava.net/zhengzhili/archive/2008/08/28/225205.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《AspectJ Cookbook》读书笔记十七: 实现创建型面向对象设计模式</title><link>http://www.blogjava.net/zhengzhili/archive/2008/08/27/224974.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Wed, 27 Aug 2008 03:00:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2008/08/27/224974.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/224974.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2008/08/27/224974.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/224974.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/224974.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一.实现单件模式&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;单件模式允许把类定义成具有应用程序内的一个运行时实例。通常，通过不给特定类提供默认构造函数来实现单件。package&nbsp;com.aspectj;import&nbsp;java.util.Hashtable;public&nbsp;abstract&nbs...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhengzhili/archive/2008/08/27/224974.html'>阅读全文</a><img src ="http://www.blogjava.net/zhengzhili/aggbug/224974.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2008-08-27 11:00 <a href="http://www.blogjava.net/zhengzhili/archive/2008/08/27/224974.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《AspectJ Cookbook》读书笔记十六: 增强类和编译器</title><link>http://www.blogjava.net/zhengzhili/archive/2008/08/27/224927.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Wed, 27 Aug 2008 01:31:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2008/08/27/224927.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/224927.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2008/08/27/224927.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/224927.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/224927.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;本章节说明了如何使用静态横切技术，以静态方式使用AspectJ中的方面把行为和接口引入现有的类中。使用这些技术，可以扩展类来实现接口，从新的父类扩展类，引入新方法和属性，减轻说发生异常的影响，以及继承多个基类。<br />
<strong>一.扩展现有的类<br />
</strong>
<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_54_228_Open_Image" onclick="this.style.display='none'; Codehighlighter1_54_228_Open_Text.style.display='none'; Codehighlighter1_54_228_Closed_Image.style.display='inline'; Codehighlighter1_54_228_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_54_228_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_54_228_Closed_Text.style.display='none'; Codehighlighter1_54_228_Open_Image.style.display='inline'; Codehighlighter1_54_228_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;ExtendClassRecipe&nbsp;</span><span id="Codehighlighter1_54_228_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_54_228_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;MyClass.newVariable&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">20</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_134_226_Open_Image" onclick="this.style.display='none'; Codehighlighter1_134_226_Open_Text.style.display='none'; Codehighlighter1_134_226_Closed_Image.style.display='inline'; Codehighlighter1_134_226_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_134_226_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_134_226_Closed_Text.style.display='none'; Codehighlighter1_134_226_Open_Image.style.display='inline'; Codehighlighter1_134_226_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;MyClass.bar(String&nbsp;name)&nbsp;</span><span id="Codehighlighter1_134_226_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_134_226_Open_Text"><span style="color: #000000">{&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;bar(String&nbsp;name)&nbsp;,&nbsp;name:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;name);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.newVariable;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;示例中将属性newVariable和方法bar(String)添加到了MyClass类中。<br />
<br />
<strong>二.声明类之间的继承关系<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;使用declare parents语句，指定特定的类是从另一个类扩展而来。<br />
&nbsp;&nbsp;&nbsp;&nbsp;以下代码说明了如何为MyClass类指定新的继承关系<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_63_112_Open_Image" onclick="this.style.display='none'; Codehighlighter1_63_112_Open_Text.style.display='none'; Codehighlighter1_63_112_Closed_Image.style.display='inline'; Codehighlighter1_63_112_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_63_112_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_63_112_Closed_Text.style.display='none'; Codehighlighter1_63_112_Open_Image.style.display='inline'; Codehighlighter1_63_112_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;IntroduceInheritanceRecipe&nbsp;</span><span id="Codehighlighter1_63_112_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_63_112_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;declare&nbsp;parents:MyClass&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;AnotherClass;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<br />
<strong>三.使用方面实现接口</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;使用declare parents语句，指定特定的类实现特定的接口。<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_61_112_Open_Image" onclick="this.style.display='none'; Codehighlighter1_61_112_Open_Text.style.display='none'; Codehighlighter1_61_112_Closed_Image.style.display='inline'; Codehighlighter1_61_112_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_61_112_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_61_112_Closed_Text.style.display='none'; Codehighlighter1_61_112_Open_Image.style.display='inline'; Codehighlighter1_61_112_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;ImplementInterfaceRecipe&nbsp;</span><span id="Codehighlighter1_61_112_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_61_112_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;declare&nbsp;parents:MyClass&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;MyInterface;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
&nbsp;&nbsp;&nbsp;&nbsp;把接口应用于现有类的能力允许通过接口类型的引用那个类的对象，如：<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">//</span><span style="color: #008000">Create&nbsp;an&nbsp;instance&nbsp;of&nbsp;MyClass</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">MyInterface&nbsp;myObject&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MyClass();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">Work&nbsp;with&nbsp;the&nbsp;interface&nbsp;reference</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">myObject.foo(</span><span style="color: #000000">1</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">Russ</span><span style="color: #000000">"</span><span style="color: #000000">);</span></div>
<br />
<strong>四.声明默认的接口实现<br />
</strong>
<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_73_233_Open_Image" onclick="this.style.display='none'; Codehighlighter1_73_233_Open_Text.style.display='none'; Codehighlighter1_73_233_Closed_Image.style.display='inline'; Codehighlighter1_73_233_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_73_233_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_73_233_Closed_Text.style.display='none'; Codehighlighter1_73_233_Open_Image.style.display='inline'; Codehighlighter1_73_233_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;DefaultInterfaceImplementationRecipe&nbsp;</span><span id="Codehighlighter1_73_233_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_73_233_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;declare&nbsp;parents:MyClass&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;MyInterface;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">public&nbsp;void&nbsp;MyInterface.bar(String&nbsp;name)&nbsp;{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">System.out.println("bar(String)&nbsp;called&nbsp;on&nbsp;"&nbsp;+&nbsp;this);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">}</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">}</span></span></div>
<br />
<strong>五.减轻异常的影响</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;使用declare soft语句，可以指定一组应该减轻其影响的异常--也就是说，在通过特定连接点选择的连接点上引发这些异常时，将其转换成未捕获的异常。<br />
&nbsp;&nbsp;&nbsp;&nbsp;示例中说明了减轻在void foo()方法上引发的ExcepionA异常的影响，使得该方法的用户不必关心如何处理这个异常。<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_56_156_Open_Image" onclick="this.style.display='none'; Codehighlighter1_56_156_Open_Text.style.display='none'; Codehighlighter1_56_156_Closed_Image.style.display='inline'; Codehighlighter1_56_156_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_56_156_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_56_156_Closed_Text.style.display='none'; Codehighlighter1_56_156_Open_Image.style.display='inline'; Codehighlighter1_56_156_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;SoftExceptionRecipe&nbsp;</span><span id="Codehighlighter1_56_156_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_56_156_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;callPointCut()&nbsp;:&nbsp;call(</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;MyClass.foo());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;declare&nbsp;soft&nbsp;:&nbsp;ExceptionA&nbsp;:&nbsp;callPointCut();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<br />
<strong>六.扩展编译</strong><br />
分别使用declare error或declare warning语句，指定应该引发编译器错误或警告的条件。<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_59_333_Open_Image" onclick="this.style.display='none'; Codehighlighter1_59_333_Open_Text.style.display='none'; Codehighlighter1_59_333_Closed_Image.style.display='inline'; Codehighlighter1_59_333_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_59_333_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_59_333_Closed_Text.style.display='none'; Codehighlighter1_59_333_Open_Image.style.display='inline'; Codehighlighter1_59_333_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;CompilaionAdviceRecipe&nbsp;</span><span id="Codehighlighter1_59_333_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_59_333_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;declare&nbsp;error:call(</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;ProtectedAccessClass.setValue(</span><span style="color: #0000ff">int</span><span style="color: #000000">))&nbsp;&nbsp;:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Must&nbsp;only&nbsp;set&nbsp;the&nbsp;ProtectedAccessClass.value&nbsp;from&nbsp;a&nbsp;MyClass&nbsp;object</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;declare&nbsp;warning:call(</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;ProtectedAccessClass.getValue())&nbsp;:</span><span style="color: #000000">"</span><span style="color: #000000">Should&nbsp;only&nbsp;be&nbsp;reading&nbsp;ProtectedAccessClass.value&nbsp;from&nbsp;a&nbsp;MyClass&nbsp;object</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<br />
<img src ="http://www.blogjava.net/zhengzhili/aggbug/224927.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2008-08-27 09:31 <a href="http://www.blogjava.net/zhengzhili/archive/2008/08/27/224927.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《AspectJ Cookbook》读书笔记十五: 定义方面的关系</title><link>http://www.blogjava.net/zhengzhili/archive/2008/08/26/224495.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Tue, 26 Aug 2008 07:34:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2008/08/26/224495.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/224495.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2008/08/26/224495.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/224495.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/224495.html</trackback:ping><description><![CDATA[<p><strong>一.继承切入点定义<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;创建一个抽象类。使用合适的public、protected或default访问修饰符在抽象方面内定义可重用的切入点逻辑。最后，把抽象方面继承进子方面中，以重用声明的切入点。<br />
</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_75_147_Open_Image" onclick="this.style.display='none'; Codehighlighter1_75_147_Open_Text.style.display='none'; Codehighlighter1_75_147_Closed_Image.style.display='inline'; Codehighlighter1_75_147_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_75_147_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_75_147_Closed_Text.style.display='none'; Codehighlighter1_75_147_Open_Image.style.display='inline'; Codehighlighter1_75_147_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;aspect&nbsp;BasePointcutDefinitionsAspect&nbsp;</span><span id="Codehighlighter1_75_147_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_75_147_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;pointcut&nbsp;callPointcut()&nbsp;:&nbsp;call(</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;MyClass.foo(</span><span style="color: #0000ff">int</span><span style="color: #000000">,String));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_95_507_Open_Image" onclick="this.style.display='none'; Codehighlighter1_95_507_Open_Text.style.display='none'; Codehighlighter1_95_507_Closed_Image.style.display='inline'; Codehighlighter1_95_507_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_95_507_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_95_507_Closed_Text.style.display='none'; Codehighlighter1_95_507_Open_Image.style.display='inline'; Codehighlighter1_95_507_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;ReusePointcutsRecipe&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;BasePointcutDefinitionsAspect&nbsp;</span><span id="Codehighlighter1_95_507_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_95_507_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img id="Codehighlighter1_176_505_Open_Image" onclick="this.style.display='none'; Codehighlighter1_176_505_Open_Text.style.display='none'; Codehighlighter1_176_505_Closed_Image.style.display='inline'; Codehighlighter1_176_505_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_176_505_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_176_505_Closed_Text.style.display='none'; Codehighlighter1_176_505_Open_Image.style.display='inline'; Codehighlighter1_176_505_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;before():callPointcut()</span><span style="color: #000000">&amp;&amp;!</span><span style="color: #000000">within(ReusePointcutsRecipe</span><span style="color: #000000">+</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_176_505_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_176_505_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">----------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;----------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;attached&nbsp;to&nbsp;the&nbsp;call&nbsp;point&nbsp;cut</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Target:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getTarget());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">This:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getThis());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">-----------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
</p>
<p><strong></p>
<p><br />
<br />
二.实现抽象切入点<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在声明切入点和周围的方面时，使用abstract关键字，并且不要提供任何切入点逻辑。<br />
</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_64_511_Open_Image" onclick="this.style.display='none'; Codehighlighter1_64_511_Open_Text.style.display='none'; Codehighlighter1_64_511_Closed_Image.style.display='inline'; Codehighlighter1_64_511_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_64_511_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_64_511_Closed_Text.style.display='none'; Codehighlighter1_64_511_Open_Image.style.display='inline'; Codehighlighter1_64_511_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;aspect&nbsp;BaseAbstractAspect&nbsp;</span><span id="Codehighlighter1_64_511_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_64_511_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_67_156_Open_Image" onclick="this.style.display='none'; Codehighlighter1_67_156_Open_Text.style.display='none'; Codehighlighter1_67_156_Closed_Image.style.display='inline'; Codehighlighter1_67_156_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_67_156_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_67_156_Closed_Text.style.display='none'; Codehighlighter1_67_156_Open_Image.style.display='inline'; Codehighlighter1_67_156_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_67_156_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">/**&nbsp;*/</span><span id="Codehighlighter1_67_156_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nbsp;an&nbsp;abstract&nbsp;pointcut&nbsp;placeholder<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;for&nbsp;derived&nbsp;aspects&nbsp;to&nbsp;specify<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;pointcut&nbsp;abstractBasepointcut();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_211_421_Open_Image" onclick="this.style.display='none'; Codehighlighter1_211_421_Open_Text.style.display='none'; Codehighlighter1_211_421_Closed_Image.style.display='inline'; Codehighlighter1_211_421_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_211_421_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_211_421_Closed_Text.style.display='none'; Codehighlighter1_211_421_Open_Image.style.display='inline'; Codehighlighter1_211_421_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_211_421_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">/**&nbsp;*/</span><span id="Codehighlighter1_211_421_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;whenever&nbsp;a&nbsp;join&nbsp;point<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;picked&nbsp;by&nbsp;the&nbsp;abstractBasePointcut&nbsp;(specified<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;by&nbsp;specialized&nbsp;aspects)&nbsp;is&nbsp;encountered,&nbsp;and&nbsp;not&nbsp;within<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;this&nbsp;aspect&nbsp;or&nbsp;any&nbsp;inheriting&nbsp;aspects.<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;runAdvicePointcut()&nbsp;:&nbsp;abstractBasepointcut()&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">within(BaseAbstractAspect</span><span style="color: #000000">+</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_92_797_Open_Image" onclick="this.style.display='none'; Codehighlighter1_92_797_Open_Text.style.display='none'; Codehighlighter1_92_797_Closed_Image.style.display='inline'; Codehighlighter1_92_797_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_92_797_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_92_797_Closed_Text.style.display='none'; Codehighlighter1_92_797_Open_Image.style.display='inline'; Codehighlighter1_92_797_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;AbstractImplementationAspect&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;BaseAbstractAspect&nbsp;</span><span id="Codehighlighter1_92_797_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_92_797_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_98_344_Open_Image" onclick="this.style.display='none'; Codehighlighter1_98_344_Open_Text.style.display='none'; Codehighlighter1_98_344_Closed_Image.style.display='inline'; Codehighlighter1_98_344_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_98_344_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_98_344_Closed_Text.style.display='none'; Codehighlighter1_98_344_Open_Image.style.display='inline'; Codehighlighter1_98_344_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_98_344_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">/**&nbsp;*/</span><span id="Codehighlighter1_98_344_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;whenever&nbsp;a&nbsp;method<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;matching&nbsp;the&nbsp;following&nbsp;rules&nbsp;gets&nbsp;called:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Class&nbsp;Name:&nbsp;MyClass<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Name:foo<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Return:void<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Parameters:an&nbsp;int&nbsp;followed&nbsp;by&nbsp;a&nbsp;string<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;pointcut&nbsp;abstractBasepointcut():call(</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;MyClass.foo(</span><span style="color: #0000ff">int</span><span style="color: #000000">,String));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img id="Codehighlighter1_475_794_Open_Image" onclick="this.style.display='none'; Codehighlighter1_475_794_Open_Text.style.display='none'; Codehighlighter1_475_794_Closed_Image.style.display='inline'; Codehighlighter1_475_794_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_475_794_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_475_794_Closed_Text.style.display='none'; Codehighlighter1_475_794_Open_Image.style.display='inline'; Codehighlighter1_475_794_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;before():runAdvicePointcut()</span><span id="Codehighlighter1_475_794_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_475_794_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">----------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;----------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Signature:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getStaticPart().getSignature());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Source&nbsp;Location:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getStaticPart().getSourceLocation());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">-----------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><strong><br />
三.把类继承进方面中<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;使用extends关键字来声明方面扩展类。示例为一个伪日志记录类，它代表一种现有的日志记录机制。其目标是：重构对应用程序中日志记录类的所有现有的调用，并把日志记录模块化进一个方面中，它可以更灵活地织入进应用程序中。<br />
</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_45_136_Open_Image" onclick="this.style.display='none'; Codehighlighter1_45_136_Open_Text.style.display='none'; Codehighlighter1_45_136_Closed_Image.style.display='inline'; Codehighlighter1_45_136_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_45_136_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_45_136_Closed_Text.style.display='none'; Codehighlighter1_45_136_Open_Image.style.display='inline'; Codehighlighter1_45_136_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;OOLogging&nbsp;</span><span id="Codehighlighter1_45_136_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_45_136_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_83_134_Open_Image" onclick="this.style.display='none'; Codehighlighter1_83_134_Open_Text.style.display='none'; Codehighlighter1_83_134_Closed_Image.style.display='inline'; Codehighlighter1_83_134_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_83_134_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_83_134_Closed_Text.style.display='none'; Codehighlighter1_83_134_Open_Image.style.display='inline'; Codehighlighter1_83_134_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;logEntry(String&nbsp;entry)&nbsp;</span><span id="Codehighlighter1_83_134_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_83_134_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Entry&nbsp;logged:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;entry);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_63_523_Open_Image" onclick="this.style.display='none'; Codehighlighter1_63_523_Open_Text.style.display='none'; Codehighlighter1_63_523_Closed_Image.style.display='inline'; Codehighlighter1_63_523_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_63_523_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_63_523_Closed_Text.style.display='none'; Codehighlighter1_63_523_Open_Image.style.display='inline'; Codehighlighter1_63_523_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;AOLogging&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;OOLogging</span><span id="Codehighlighter1_63_523_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_63_523_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_69_315_Open_Image" onclick="this.style.display='none'; Codehighlighter1_69_315_Open_Text.style.display='none'; Codehighlighter1_69_315_Closed_Image.style.display='inline'; Codehighlighter1_69_315_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_69_315_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_69_315_Closed_Text.style.display='none'; Codehighlighter1_69_315_Open_Image.style.display='inline'; Codehighlighter1_69_315_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_69_315_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">/**&nbsp;*/</span><span id="Codehighlighter1_69_315_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;whenever&nbsp;a&nbsp;method<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;matching&nbsp;the&nbsp;following&nbsp;rules&nbsp;gets&nbsp;called:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Class&nbsp;Name:&nbsp;MyClass<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Name:foo<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Return:void<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Parameters:an&nbsp;int&nbsp;followed&nbsp;by&nbsp;a&nbsp;string<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;callPointcut()&nbsp;:&nbsp;call(</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;MyClass.foo(</span><span style="color: #0000ff">int</span><span style="color: #000000">,String));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img id="Codehighlighter1_470_521_Open_Image" onclick="this.style.display='none'; Codehighlighter1_470_521_Open_Text.style.display='none'; Codehighlighter1_470_521_Closed_Image.style.display='inline'; Codehighlighter1_470_521_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_470_521_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_470_521_Closed_Text.style.display='none'; Codehighlighter1_470_521_Open_Image.style.display='inline'; Codehighlighter1_470_521_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;before():callPointcut()</span><span style="color: #000000">&amp;&amp;!</span><span style="color: #000000">within(AOLogging</span><span style="color: #000000">+</span><span style="color: #000000">)</span><span style="color: #000000">&amp;&amp;!</span><span style="color: #000000">within(AOLogging)&nbsp;</span><span id="Codehighlighter1_470_521_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_470_521_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.logEntry(thisJoinPoint.toShortString());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
&nbsp;</p>
<img src ="http://www.blogjava.net/zhengzhili/aggbug/224495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2008-08-26 15:34 <a href="http://www.blogjava.net/zhengzhili/archive/2008/08/26/224495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《AspectJ Cookbook》读书笔记十四: 定义方面实例化 </title><link>http://www.blogjava.net/zhengzhili/archive/2008/08/26/224483.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Tue, 26 Aug 2008 06:37:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2008/08/26/224483.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/224483.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2008/08/26/224483.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/224483.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/224483.html</trackback:ping><description><![CDATA[<p><strong>一. 定义单件(singleton)方面</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过把issingleton()语句显示添加到方面声明中，来显示建立单件方面实例化策略。<br />
</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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_60_824_Open_Image" onclick="this.style.display='none'; Codehighlighter1_60_824_Open_Text.style.display='none'; Codehighlighter1_60_824_Closed_Image.style.display='inline'; Codehighlighter1_60_824_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_60_824_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_60_824_Closed_Text.style.display='none'; Codehighlighter1_60_824_Open_Image.style.display='inline'; Codehighlighter1_60_824_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;Singleton&nbsp;issingleton()&nbsp;</span><span id="Codehighlighter1_60_824_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_60_824_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_63_291_Open_Image" onclick="this.style.display='none'; Codehighlighter1_63_291_Open_Text.style.display='none'; Codehighlighter1_63_291_Closed_Image.style.display='inline'; Codehighlighter1_63_291_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_63_291_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_63_291_Closed_Text.style.display='none'; Codehighlighter1_63_291_Open_Image.style.display='inline'; Codehighlighter1_63_291_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_63_291_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">/**&nbsp;*/</span><span id="Codehighlighter1_63_291_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;whenever&nbsp;a&nbsp;method&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;matching&nbsp;the&nbsp;following&nbsp;rules&nbsp;gets&nbsp;called:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Class&nbsp;Name:&nbsp;MyClass<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Name:foo<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Return&nbsp;Type:void<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Parameters:an&nbsp;int&nbsp;followed&nbsp;by&nbsp;a&nbsp;String<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;callPointCut()&nbsp;:&nbsp;call(</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;MyClass.foo(</span><span style="color: #0000ff">int</span><span style="color: #000000">,String));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Advice&nbsp;declartion</span><span style="color: #008000"><br />
<img id="Codehighlighter1_427_822_Open_Image" onclick="this.style.display='none'; Codehighlighter1_427_822_Open_Text.style.display='none'; Codehighlighter1_427_822_Closed_Image.style.display='inline'; Codehighlighter1_427_822_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_427_822_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_427_822_Closed_Text.style.display='none'; Codehighlighter1_427_822_Open_Image.style.display='inline'; Codehighlighter1_427_822_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;before():callPointCut()&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">within(Singleton</span><span style="color: #000000">+</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_427_822_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_427_822_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">----------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;----------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;attached&nbsp;to&nbsp;the&nbsp;call&nbsp;point&nbsp;cut</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Target:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getTarget());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">This:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getThis());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Aspect&nbsp;Instance:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;Singleton.aspectOf());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">-----------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;传统的面向对象单件的主要缺点是：使用单件的每个类都与单件的公共接口紧密耦合。而面向方面的单件没有这个缺点。</p>
<p><strong>二.在每个实例上定义一个方面</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AspectJ提供了perthis(Pointcut)和pertarget(Pointcut)方面实例化策略，他们依据Pointcut定义选择的类，来声明应该为每个新的对象实例所实例化的方面。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perthis(Pointcut)声明和pertarget(Poinitcut)声明之间的区别必须涉及：在到达通知的连接点时，将会检查什么对象。perthis(Pointcut)声明指定：将为通知触发连接点处的this说引用的每个新对象而实例化一个新的方面。pertarget(Pointcut)实例化策略指定：如果新对象是通知触发连接点的目标，则为每个这样的新对象实例化一个新的方面。<br />
</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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_68_838_Open_Image" onclick="this.style.display='none'; Codehighlighter1_68_838_Open_Text.style.display='none'; Codehighlighter1_68_838_Closed_Image.style.display='inline'; Codehighlighter1_68_838_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_68_838_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_68_838_Closed_Text.style.display='none'; Codehighlighter1_68_838_Open_Image.style.display='inline'; Codehighlighter1_68_838_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;PerThis&nbsp;perthis(callPointCut())&nbsp;</span><span id="Codehighlighter1_68_838_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_68_838_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_71_290_Open_Image" onclick="this.style.display='none'; Codehighlighter1_71_290_Open_Text.style.display='none'; Codehighlighter1_71_290_Closed_Image.style.display='inline'; Codehighlighter1_71_290_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_71_290_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_71_290_Closed_Text.style.display='none'; Codehighlighter1_71_290_Open_Image.style.display='inline'; Codehighlighter1_71_290_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_71_290_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">/**&nbsp;*/</span><span id="Codehighlighter1_71_290_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;whenever&nbsp;a&nbsp;method&nbsp;matching&nbsp;the&nbsp;following&nbsp;rules<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;gets&nbsp;called:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Class&nbsp;Name:&nbsp;MyClass&nbsp;Method&nbsp;Name:foo&nbsp;Method&nbsp;Return&nbsp;Type:void&nbsp;Method<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Parameters:an&nbsp;int&nbsp;followed&nbsp;by&nbsp;a&nbsp;String<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;callPointCut()&nbsp;:&nbsp;call(</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;MyClass.foo(</span><span style="color: #0000ff">int</span><span style="color: #000000">,String));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img id="Codehighlighter1_422_836_Open_Image" onclick="this.style.display='none'; Codehighlighter1_422_836_Open_Text.style.display='none'; Codehighlighter1_422_836_Closed_Image.style.display='inline'; Codehighlighter1_422_836_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_422_836_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_422_836_Closed_Text.style.display='none'; Codehighlighter1_422_836_Open_Image.style.display='inline'; Codehighlighter1_422_836_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;before():callPointCut()</span><span style="color: #000000">&amp;&amp;!</span><span style="color: #000000">within(PerThis</span><span style="color: #000000">+</span><span style="color: #000000">)</span><span id="Codehighlighter1_422_836_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_422_836_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">----------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;----------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;attached&nbsp;to&nbsp;the&nbsp;call&nbsp;point&nbsp;cut</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Target:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getTarget());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">This:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getThis());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Aspect&nbsp;Instance:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;PerThis.aspectOf(thisJoinPoint.getThis()));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">-----------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在考虑可以通过单个方面通知多个类时，perthis(Pointcut)和pertarget(Pointcut)方面实例化策略声明上的Pointcut参数提供了一些有趣的问题。以下示例中perthis(Pointcut)方面实例化策略只与executeMyClass()切入点指定的MyClass类的对象相关。<br />
</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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_86_483_Open_Image" onclick="this.style.display='none'; Codehighlighter1_86_483_Open_Text.style.display='none'; Codehighlighter1_86_483_Closed_Image.style.display='inline'; Codehighlighter1_86_483_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_86_483_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_86_483_Closed_Text.style.display='none'; Codehighlighter1_86_483_Open_Image.style.display='inline'; Codehighlighter1_86_483_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;AdviseMultipleClasses&nbsp;perthis(executeMyClassFoo())</span><span id="Codehighlighter1_86_483_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_86_483_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;pointcut&nbsp;executeMyClassFoo()&nbsp;:&nbsp;execution(</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;MyClass.foo());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;pointcut&nbsp;executeAnotherClassFoo()&nbsp;:&nbsp;execution(</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;AnotherClass.foo());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_272_357_Open_Image" onclick="this.style.display='none'; Codehighlighter1_272_357_Open_Text.style.display='none'; Codehighlighter1_272_357_Closed_Image.style.display='inline'; Codehighlighter1_272_357_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_272_357_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_272_357_Closed_Text.style.display='none'; Codehighlighter1_272_357_Open_Image.style.display='inline'; Codehighlighter1_272_357_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;before():executeMyClassFoo()&nbsp;</span><span id="Codehighlighter1_272_357_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_272_357_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Advising&nbsp;foo</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Aspect&nbsp;is:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_396_481_Open_Image" onclick="this.style.display='none'; Codehighlighter1_396_481_Open_Text.style.display='none'; Codehighlighter1_396_481_Closed_Image.style.display='inline'; Codehighlighter1_396_481_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_396_481_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_396_481_Closed_Text.style.display='none'; Codehighlighter1_396_481_Open_Image.style.display='inline'; Codehighlighter1_396_481_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;before():executeAnotherClassFoo()&nbsp;</span><span id="Codehighlighter1_396_481_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_396_481_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Advising&nbsp;foo</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Aspect&nbsp;is:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;声明只为executeMyClassFoo()切入点指定的每个新对象实例化AdviseMultipleClasses方面，这隐式排除了其他类的对象。即使声明了executeAnotherClassFoo()切入点，并且他具有相应的通知，也不会导致把任何方面应用于除了它与executeMyClassFoo()共享的那些类之外的任何类。在示例中，两个切入点之间没有共享任何公共类，因此,executeMyClassFoo()切入点及关联的通知会被忽略，因为这个切入点参与了perthis(Pointcut)实例化策略的定义。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一个方面不能具有针对两类不同对象的两种实例化策。为了确保方面的实例化策略与它通知的类的素有对象相关，一种有用的技术是：纯粹为了使用方面的实例化策略，声明一个切入点来结合方面中的所有其他的切入点声明，如:<br />
</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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_86_574_Open_Image" onclick="this.style.display='none'; Codehighlighter1_86_574_Open_Text.style.display='none'; Codehighlighter1_86_574_Closed_Image.style.display='inline'; Codehighlighter1_86_574_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_86_574_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_86_574_Closed_Text.style.display='none'; Codehighlighter1_86_574_Open_Image.style.display='inline'; Codehighlighter1_86_574_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;AdviseMultipleClasses&nbsp;perthis(executeMyClassFoo())</span><span id="Codehighlighter1_86_574_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_86_574_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;pointcut&nbsp;executeMyClassFoo()&nbsp;:&nbsp;execution(</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;MyClass.foo());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;pointcut&nbsp;executeAnotherClassFoo()&nbsp;:&nbsp;execution(</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;AnotherClass.foo());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;pointcut&nbsp;applyLifecyclePolicy()&nbsp;:&nbsp;executeMyClassFoo()</span><span style="color: #000000">||</span><span style="color: #000000">executeAnotherClassFoo();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_363_448_Open_Image" onclick="this.style.display='none'; Codehighlighter1_363_448_Open_Text.style.display='none'; Codehighlighter1_363_448_Closed_Image.style.display='inline'; Codehighlighter1_363_448_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_363_448_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_363_448_Closed_Text.style.display='none'; Codehighlighter1_363_448_Open_Image.style.display='inline'; Codehighlighter1_363_448_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;before():executeMyClassFoo()&nbsp;</span><span id="Codehighlighter1_363_448_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_363_448_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Advising&nbsp;foo</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Aspect&nbsp;is:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_487_572_Open_Image" onclick="this.style.display='none'; Codehighlighter1_487_572_Open_Text.style.display='none'; Codehighlighter1_487_572_Closed_Image.style.display='inline'; Codehighlighter1_487_572_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_487_572_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_487_572_Closed_Text.style.display='none'; Codehighlighter1_487_572_Open_Image.style.display='inline'; Codehighlighter1_487_572_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;before():executeAnotherClassFoo()&nbsp;</span><span id="Codehighlighter1_487_572_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_487_572_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Advising&nbsp;foo</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Aspect&nbsp;is:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
<strong>三.在每个控制流程上定义一个方面</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用percflow(Pointcut)方面实例化声明。percflow(Pointcut)语句指示编译器，它应该为从Pointcut参数指定的连接点集合内进入的每个新控制流程创建方面的一个新实例。<br />
</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_75_836_Open_Image" onclick="this.style.display='none'; Codehighlighter1_75_836_Open_Text.style.display='none'; Codehighlighter1_75_836_Closed_Image.style.display='inline'; Codehighlighter1_75_836_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_75_836_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_75_836_Closed_Text.style.display='none'; Codehighlighter1_75_836_Open_Image.style.display='inline'; Codehighlighter1_75_836_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;PerControlFlow&nbsp;percflow(callPointCut())</span><span id="Codehighlighter1_75_836_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_75_836_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_78_297_Open_Image" onclick="this.style.display='none'; Codehighlighter1_78_297_Open_Text.style.display='none'; Codehighlighter1_78_297_Closed_Image.style.display='inline'; Codehighlighter1_78_297_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_78_297_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_78_297_Closed_Text.style.display='none'; Codehighlighter1_78_297_Open_Image.style.display='inline'; Codehighlighter1_78_297_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_78_297_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">/**&nbsp;*/</span><span id="Codehighlighter1_78_297_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;whenever&nbsp;a&nbsp;method&nbsp;matching&nbsp;the&nbsp;following&nbsp;rules<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;gets&nbsp;called:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Class&nbsp;Name:&nbsp;MyClass&nbsp;Method&nbsp;Name:foo&nbsp;Method&nbsp;Return&nbsp;Type:void&nbsp;Method<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Parameters:an&nbsp;int&nbsp;followed&nbsp;by&nbsp;a&nbsp;String<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;callPointCut()&nbsp;:&nbsp;call(</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;MyClass.foo(</span><span style="color: #0000ff">int</span><span style="color: #000000">,String));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img id="Codehighlighter1_436_834_Open_Image" onclick="this.style.display='none'; Codehighlighter1_436_834_Open_Text.style.display='none'; Codehighlighter1_436_834_Closed_Image.style.display='inline'; Codehighlighter1_436_834_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_436_834_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_436_834_Closed_Text.style.display='none'; Codehighlighter1_436_834_Open_Image.style.display='inline'; Codehighlighter1_436_834_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;before():callPointCut()</span><span style="color: #000000">&amp;&amp;!</span><span style="color: #000000">within(PerControlFlow</span><span style="color: #000000">+</span><span style="color: #000000">)</span><span id="Codehighlighter1_436_834_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_436_834_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">----------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;----------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;attached&nbsp;to&nbsp;the&nbsp;call&nbsp;point&nbsp;cut</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Target:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getTarget());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">This:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getThis());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Aspect&nbsp;Instance:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;PerControlFlow.aspectOf());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">-----------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
percflow(Pointcut)语句代表最细粒度的方面实例化策略，并且会为特定的代码段创建最大苏联高的不同方面实例。</p>
<img src ="http://www.blogjava.net/zhengzhili/aggbug/224483.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2008-08-26 14:37 <a href="http://www.blogjava.net/zhengzhili/archive/2008/08/26/224483.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《AspectJ Cookbook》读书笔记十三: 定义通知 </title><link>http://www.blogjava.net/zhengzhili/archive/2008/08/26/224467.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Tue, 26 Aug 2008 05:45:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2008/08/26/224467.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/224467.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2008/08/26/224467.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/224467.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/224467.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一.访问类成员&nbsp;package&nbsp;com.aspectj;public&nbsp;privileged&nbsp;aspect&nbsp;MemberAccessRecipe&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;/**&nbsp;*//**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nb...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhengzhili/archive/2008/08/26/224467.html'>阅读全文</a><img src ="http://www.blogjava.net/zhengzhili/aggbug/224467.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2008-08-26 13:45 <a href="http://www.blogjava.net/zhengzhili/archive/2008/08/26/224467.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《AspectJ Cookbook》读书笔记十二: 捕获基于布尔或复合表达式的连接点 </title><link>http://www.blogjava.net/zhengzhili/archive/2008/08/25/224269.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Mon, 25 Aug 2008 12:40:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2008/08/25/224269.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/224269.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2008/08/25/224269.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/224269.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/224269.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一.捕获何时连接点上的运行时条件评估为true&nbsp;&nbsp;&nbsp;&nbsp;使用if(Expression)语句来评估包含要比较的运行时变量的布尔表达式。if(Expression)语句的语法如下：&nbsp;&nbsp;&nbsp;&nbsp;pointcut &lt;pointcut name&gt;(&lt;any values to be picked up&gt...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhengzhili/archive/2008/08/25/224269.html'>阅读全文</a><img src ="http://www.blogjava.net/zhengzhili/aggbug/224269.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2008-08-25 20:40 <a href="http://www.blogjava.net/zhengzhili/archive/2008/08/25/224269.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《AspectJ Cookbook》读书笔记十一: 捕获基于对象的连接点 </title><link>http://www.blogjava.net/zhengzhili/archive/2008/08/25/224168.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Mon, 25 Aug 2008 07:11:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2008/08/25/224168.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/224168.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2008/08/25/224168.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/224168.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/224168.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this([Type | Identifier])研究的是在捕捉的连接点处由this引用的对象的类型。连接点的目标(通过target([Type | Identifier])切入点指定)依赖于连接点类型而有所不同，但它常常是在其上调用方法的对象，或者是以某种方式访问的在其中遇到连接点的属性。...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhengzhili/archive/2008/08/25/224168.html'>阅读全文</a><img src ="http://www.blogjava.net/zhengzhili/aggbug/224168.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2008-08-25 15:11 <a href="http://www.blogjava.net/zhengzhili/archive/2008/08/25/224168.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《AspectJ Cookbook》读书笔记十: 捕获基于控制流程的连接点</title><link>http://www.blogjava.net/zhengzhili/archive/2008/08/25/224077.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Mon, 25 Aug 2008 02:36:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2008/08/25/224077.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/224077.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2008/08/25/224077.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/224077.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/224077.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;本章中描述的切入点支持捕获另一个初始连接点作用域或环境内的所有连接点。每个连接点在程序的控制流程中都有一个具体位置，这为通过这里描述的切入点声明捕获的连接点提供了环境。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>一. 捕获通过初始连接点开始的程序控制流程内的所有连接点</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;使用cflow(Pointcut)切入点。cflow(Pointcut)切入点的语法如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;pointcut &lt;pointcut name&gt;(<strong>&lt;any values to be picked up&gt;</strong>) : cflow(<strong>&lt;pointcut&gt;</strong>);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;cflow(Pointcut)切入点具有3个关键特征:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.cflow(Pointcut)切入点捕获在初始特定的连接点环境内遇到的所有连接点，这个初始连接点是通过另一个切入点选择的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.捕获的连接点包括初始连接点。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.作用域是cflow(pointcut)切入点中重要的鉴别器。这个切入点将捕获通过切入点参数捕获的连接点的控制流程内的所有连接点。<br />
</p>
<p><br />
</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_48_1161_Open_Image" onclick="this.style.display='none'; Codehighlighter1_48_1161_Open_Text.style.display='none'; Codehighlighter1_48_1161_Closed_Image.style.display='inline'; Codehighlighter1_48_1161_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_48_1161_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_48_1161_Closed_Text.style.display='none'; Codehighlighter1_48_1161_Open_Image.style.display='inline'; Codehighlighter1_48_1161_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;CFlowRecipe&nbsp;</span><span id="Codehighlighter1_48_1161_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_48_1161_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_51_278_Open_Image" onclick="this.style.display='none'; Codehighlighter1_51_278_Open_Text.style.display='none'; Codehighlighter1_51_278_Closed_Image.style.display='inline'; Codehighlighter1_51_278_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_51_278_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_51_278_Closed_Text.style.display='none'; Codehighlighter1_51_278_Open_Image.style.display='inline'; Codehighlighter1_51_278_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_51_278_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">/**&nbsp;*/</span><span id="Codehighlighter1_51_278_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;whenever&nbsp;a&nbsp;method<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;matching&nbsp;the&nbsp;following&nbsp;rules&nbsp;gets&nbsp;called:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Class&nbsp;Name:MyClass<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Name:foo<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Return&nbsp;Type:void<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Parameters:&nbsp;an&nbsp;int&nbsp;followed&nbsp;by&nbsp;a&nbsp;String<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;callInitialPointcut():call(</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;MyClass.foo(</span><span style="color: #0000ff">int</span><span style="color: #000000">,String));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_351_576_Open_Image" onclick="this.style.display='none'; Codehighlighter1_351_576_Open_Text.style.display='none'; Codehighlighter1_351_576_Closed_Image.style.display='inline'; Codehighlighter1_351_576_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_351_576_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_351_576_Closed_Text.style.display='none'; Codehighlighter1_351_576_Open_Image.style.display='inline'; Codehighlighter1_351_576_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_351_576_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">/**&nbsp;*/</span><span id="Codehighlighter1_351_576_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;whenever&nbsp;a&nbsp;join&nbsp;point&nbsp;is&nbsp;encountered<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;including&nbsp;and&nbsp;after&nbsp;the&nbsp;initial&nbsp;join&nbsp;point&nbsp;triggers&nbsp;the&nbsp;pointcut<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;that&nbsp;is&nbsp;specified&nbsp;in&nbsp;the&nbsp;parameter:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Pointcut&nbsp;Name:callInitialPointcut<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;cflowPointcut():cflow(callInitialPointcut());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img id="Codehighlighter1_711_1155_Open_Image" onclick="this.style.display='none'; Codehighlighter1_711_1155_Open_Text.style.display='none'; Codehighlighter1_711_1155_Closed_Image.style.display='inline'; Codehighlighter1_711_1155_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_711_1155_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_711_1155_Closed_Text.style.display='none'; Codehighlighter1_711_1155_Open_Image.style.display='inline'; Codehighlighter1_711_1155_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;before()&nbsp;:&nbsp;cflowPointcut()&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">within(CFlowRecipe</span><span style="color: #000000">+</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_711_1155_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_711_1155_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">----------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;----------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;picked&nbsp;by&nbsp;CFlowRecipe()</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Join&nbsp;Point&nbsp;Kind:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getKind());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Signature:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getStaticPart().getSignature());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Source&nbsp;Line:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getStaticPart().getSourceLocation());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">-----------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;值得更详细研究cflow(Pointcut)做什么。这个特殊的切入点引入了连接点环境的概念。它是指每个连接点具有一个作用域，在这个用途域内，它被看成是执行程序的控制流程的一部分。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在这个控制流程内，任何遇到的连接点都会触发cflow(Pointcut)切入点，并调用任何关联的通知。当初始连接点触发指定的切入点参数时，cflow(Pointcut)切入点会起作用，并触发其关联的通知。然后，将为在初始连接点环境内的控制流程中遇到的每个连接点调用与cflow(Pointcut)关联的通知。最后，捕获的连接点集合包括初始连接点本身，这就是这个切入点与cflowbelow(Pointcut)切入点之间的主要区别。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在cflow(Pointcut)的当前实现中，在使用它时，其实现方式会引入大量的系统开销。在可能的地方，并且连接点重用不受影响时，可以考虑优先使用withincode(Signature)切入点。</p>
<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;二.捕获程序控制流程内的所有连接点，不包括初始连接点</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;使用cflowbelow(Pointcut)切入点。cflowbelow(Pointcut)切入点的语法如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;pointcut &lt;pointcut name&gt;(<strong>&lt;any values to be picked up&gt;</strong>) : cflowbelow(<strong>&lt;pointcut&gt;</strong>);<br />
</p>
<p><br />
</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_53_1167_Open_Image" onclick="this.style.display='none'; Codehighlighter1_53_1167_Open_Text.style.display='none'; Codehighlighter1_53_1167_Closed_Image.style.display='inline'; Codehighlighter1_53_1167_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_53_1167_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_53_1167_Closed_Text.style.display='none'; Codehighlighter1_53_1167_Open_Image.style.display='inline'; Codehighlighter1_53_1167_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;CFlowBelowRecipe&nbsp;</span><span id="Codehighlighter1_53_1167_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_53_1167_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_56_283_Open_Image" onclick="this.style.display='none'; Codehighlighter1_56_283_Open_Text.style.display='none'; Codehighlighter1_56_283_Closed_Image.style.display='inline'; Codehighlighter1_56_283_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_56_283_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_56_283_Closed_Text.style.display='none'; Codehighlighter1_56_283_Open_Image.style.display='inline'; Codehighlighter1_56_283_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_56_283_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">/**&nbsp;*/</span><span id="Codehighlighter1_56_283_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;whenever&nbsp;a&nbsp;method<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;matching&nbsp;the&nbsp;following&nbsp;rules&nbsp;gets&nbsp;called:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Class&nbsp;Name:MyClass<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Name:foo<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Return&nbsp;Type:void<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Parameters:&nbsp;an&nbsp;int&nbsp;followed&nbsp;by&nbsp;a&nbsp;String<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;callInitialPointcut():call(</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;MyClass.foo(</span><span style="color: #0000ff">int</span><span style="color: #000000">,String));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_356_567_Open_Image" onclick="this.style.display='none'; Codehighlighter1_356_567_Open_Text.style.display='none'; Codehighlighter1_356_567_Closed_Image.style.display='inline'; Codehighlighter1_356_567_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_356_567_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_356_567_Closed_Text.style.display='none'; Codehighlighter1_356_567_Open_Image.style.display='inline'; Codehighlighter1_356_567_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_356_567_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">/**&nbsp;*/</span><span id="Codehighlighter1_356_567_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;whenever&nbsp;a&nbsp;join&nbsp;point&nbsp;is&nbsp;encountered<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;after&nbsp;the&nbsp;initial&nbsp;join&nbsp;point&nbsp;triggers&nbsp;the&nbsp;pointcut<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;that&nbsp;is&nbsp;specified&nbsp;in&nbsp;the&nbsp;parameter:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Pointcut&nbsp;Name:callInitialPointcut<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;cflowPointcut():cflowbelow(callInitialPointcut());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img id="Codehighlighter1_712_1161_Open_Image" onclick="this.style.display='none'; Codehighlighter1_712_1161_Open_Text.style.display='none'; Codehighlighter1_712_1161_Closed_Image.style.display='inline'; Codehighlighter1_712_1161_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_712_1161_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_712_1161_Closed_Text.style.display='none'; Codehighlighter1_712_1161_Open_Image.style.display='inline'; Codehighlighter1_712_1161_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;before()&nbsp;:&nbsp;cflowPointcut()&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">within(CFlowBelowRecipe</span><span style="color: #000000">+</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_712_1161_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_712_1161_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">----------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;----------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;picked&nbsp;by&nbsp;CFlowBelowRecipe()</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Join&nbsp;Point&nbsp;Kind:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getKind());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Signature:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getStaticPart().getSignature());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Source&nbsp;Line:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getStaticPart().getSourceLocation());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">-----------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;这里和第一部分介绍的内容有点区别；其区别是实际捕获的连接点数量。cflow(Pointcut)切入点会触发在初始连接点环境内遇到的所有连接点(包括初始连接点)上的通知，而cflowbelow(Pointcut)切入点则不包括那个初始连接点。</p>
 <img src ="http://www.blogjava.net/zhengzhili/aggbug/224077.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2008-08-25 10:36 <a href="http://www.blogjava.net/zhengzhili/archive/2008/08/25/224077.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《AspectJ Cookbook》读书笔记九: 捕获程序作用域内的连接点</title><link>http://www.blogjava.net/zhengzhili/archive/2008/08/25/224075.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Mon, 25 Aug 2008 02:32:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2008/08/25/224075.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/224075.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2008/08/25/224075.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/224075.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/224075.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;切入点定义设计中的常用方式是：基于关注的程序作用域，限制捕获连接点的范围。这可以让你即使控制在进一步的切入点定义中将会涉及哪些连接点。<br />
&nbsp;&nbsp;&nbsp;&nbsp;本章中的切入点相当容易理解，并且他们是AspectJ中一些常用的元素。例如，广泛使用的within(TypePattern)切入点将以!within(%THIS_ASPECT%)形式使用它。这个AspectJ术语限制了当前方面之外的每个连接点的作用域，从而可以防止通知触发对相同通知块的递归调用，并导致一个无限循环。<br />
&nbsp;&nbsp;&nbsp;<strong>&nbsp;一. 捕获特定类中的所有连接点<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;使用within(TypePattern)切入点，利用TypePattern指定特定类类型模式，within(TypePattern)切入点的语法如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;pointcut &lt;pointcut name&gt;(<strong>&lt;any values to be picked up&gt;</strong>) : within(<strong>&lt;class&gt;</strong>);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;within(TypePattern)切入点具有3个关键特征：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.within(TypePattern)切入点捕获指定类作用域中的所有连接点。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.within(TypePattern)切入点极少孤立使用。相反，它通常与切入点结合使用，用于减少将触发附带通知的连接点。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.TypePattern可以包含通配符，用于选择不同类上的一系列连接点。<br />
</p>
<p><br />
</p>
<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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_54_755_Open_Image" onclick="this.style.display='none'; Codehighlighter1_54_755_Open_Text.style.display='none'; Codehighlighter1_54_755_Closed_Image.style.display='inline'; Codehighlighter1_54_755_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_54_755_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_54_755_Closed_Text.style.display='none'; Codehighlighter1_54_755_Open_Image.style.display='inline'; Codehighlighter1_54_755_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;WithinClassRecipe&nbsp;</span><span id="Codehighlighter1_54_755_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_54_755_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_57_176_Open_Image" onclick="this.style.display='none'; Codehighlighter1_57_176_Open_Text.style.display='none'; Codehighlighter1_57_176_Closed_Image.style.display='inline'; Codehighlighter1_57_176_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_57_176_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_57_176_Closed_Text.style.display='none'; Codehighlighter1_57_176_Open_Image.style.display='inline'; Codehighlighter1_57_176_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_57_176_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">/**&nbsp;*/</span><span id="Codehighlighter1_57_176_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;on&nbsp;any&nbsp;join&nbsp;point&nbsp;encountered&nbsp;within<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;the&nbsp;defined&nbsp;scope:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Scope:MyClass<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;withinMyClass()&nbsp;:&nbsp;within(MyClass);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img id="Codehighlighter1_306_752_Open_Image" onclick="this.style.display='none'; Codehighlighter1_306_752_Open_Text.style.display='none'; Codehighlighter1_306_752_Closed_Image.style.display='inline'; Codehighlighter1_306_752_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_306_752_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_306_752_Closed_Text.style.display='none'; Codehighlighter1_306_752_Open_Image.style.display='inline'; Codehighlighter1_306_752_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;before()&nbsp;:&nbsp;withinMyClass()&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">within(WithinClassRecipe</span><span style="color: #000000">+</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_306_752_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_306_752_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">----------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;----------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;picked&nbsp;by&nbsp;withinMyClass()</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Join&nbsp;Point&nbsp;Kind:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getKind());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Signature:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getStaticPart().getSignature());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Source&nbsp;Line:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getStaticPart().getSourceLocation());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">-----------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
<br />
<strong>二. 捕获特定包中的所有连接点</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;within(TypePattern)切入点提供一种有用的手段，它使用通配符在出现在每个类中的连接点中指定一个关注。可以在TypePattern中使用合适的通配符，从切入点逻辑的余下部分中包含或排除连接点的整个包。<br />
<br />
</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_56_770_Open_Image" onclick="this.style.display='none'; Codehighlighter1_56_770_Open_Text.style.display='none'; Codehighlighter1_56_770_Closed_Image.style.display='inline'; Codehighlighter1_56_770_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_56_770_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_56_770_Closed_Text.style.display='none'; Codehighlighter1_56_770_Open_Image.style.display='inline'; Codehighlighter1_56_770_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;WithinPackageRecipe&nbsp;</span><span id="Codehighlighter1_56_770_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_56_770_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_59_179_Open_Image" onclick="this.style.display='none'; Codehighlighter1_59_179_Open_Text.style.display='none'; Codehighlighter1_59_179_Closed_Image.style.display='inline'; Codehighlighter1_59_179_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_59_179_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_59_179_Closed_Text.style.display='none'; Codehighlighter1_59_179_Open_Image.style.display='inline'; Codehighlighter1_59_179_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_59_179_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">/**&nbsp;*/</span><span id="Codehighlighter1_59_179_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;on&nbsp;any&nbsp;join&nbsp;point&nbsp;encountered&nbsp;within<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;the&nbsp;defined&nbsp;scope:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Scope:packageA<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;withinPackageA()&nbsp;:&nbsp;within(packageA.</span><span style="color: #000000">*</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img id="Codehighlighter1_316_767_Open_Image" onclick="this.style.display='none'; Codehighlighter1_316_767_Open_Text.style.display='none'; Codehighlighter1_316_767_Closed_Image.style.display='inline'; Codehighlighter1_316_767_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_316_767_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_316_767_Closed_Text.style.display='none'; Codehighlighter1_316_767_Open_Image.style.display='inline'; Codehighlighter1_316_767_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;before()&nbsp;:&nbsp;withinPackageA()&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">within(WithinPackageRecipe</span><span style="color: #000000">+</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_316_767_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_316_767_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">----------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;----------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;picked&nbsp;by&nbsp;WitinPackageRecipe()</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Join&nbsp;Point&nbsp;Kind:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getKind());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Signature:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getStaticPart().getSignature());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Source&nbsp;Line:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getStaticPart().getSourceLocation());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">-----------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p>&nbsp;</p>
<p><strong>三. 捕获特定方法内的所有连接点<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;使用withincode(Signature)切入点。withincode(Signature)切入点的语法如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;pointcut &lt;pointcut name&gt;(<strong>&lt;any values to be picked up&gt;</strong>) : withincode(<strong>&lt;modifier&gt; &lt;class&gt;.&lt;method&gt;(&lt;paramter types&gt;)</strong>);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;withincode(Signature)切入点有3个关键特征：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1. withincode(Signature)切入点指定了特定方法的本地作用域内的所有连接点。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2. withincode(Signature)切入点极少孤立使用。相反，他通常与其他切入点结合使用，用于减少将触发附带通知的连接点。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3. Signaure可以包含通配符，用于选择不同类的不同方法上的一系列连接点。<br />
<br />
</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_55_947_Open_Image" onclick="this.style.display='none'; Codehighlighter1_55_947_Open_Text.style.display='none'; Codehighlighter1_55_947_Closed_Image.style.display='inline'; Codehighlighter1_55_947_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_55_947_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_55_947_Closed_Text.style.display='none'; Codehighlighter1_55_947_Open_Image.style.display='inline'; Codehighlighter1_55_947_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;WithinMethodRecipe&nbsp;</span><span id="Codehighlighter1_55_947_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_55_947_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_58_301_Open_Image" onclick="this.style.display='none'; Codehighlighter1_58_301_Open_Text.style.display='none'; Codehighlighter1_58_301_Closed_Image.style.display='inline'; Codehighlighter1_58_301_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_58_301_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_58_301_Closed_Text.style.display='none'; Codehighlighter1_58_301_Open_Image.style.display='inline'; Codehighlighter1_58_301_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_58_301_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">/**&nbsp;*/</span><span id="Codehighlighter1_58_301_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;whenever&nbsp;a&nbsp;method<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;matching&nbsp;the&nbsp;following&nbsp;rules&nbsp;gets&nbsp;called:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Class&nbsp;Name：MyClass<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Name:foo<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Return&nbsp;Type:&nbsp;*&nbsp;(any&nbsp;return&nbsp;type)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Parameters:&nbsp;an&nbsp;int&nbsp;followed&nbsp;by&nbsp;a&nbsp;String<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;withinFooIntStringAnyReturnPointcut()&nbsp;:&nbsp;withincode(</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;MyClass.foo(</span><span style="color: #0000ff">int</span><span style="color: #000000">,String));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img id="Codehighlighter1_498_944_Open_Image" onclick="this.style.display='none'; Codehighlighter1_498_944_Open_Text.style.display='none'; Codehighlighter1_498_944_Closed_Image.style.display='inline'; Codehighlighter1_498_944_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_498_944_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_498_944_Closed_Text.style.display='none'; Codehighlighter1_498_944_Open_Image.style.display='inline'; Codehighlighter1_498_944_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;before()&nbsp;:&nbsp;withinFooIntStringAnyReturnPointcut()&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">within(WithinMethodRecipe</span><span style="color: #000000">+</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_498_944_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_498_944_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">----------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;----------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;picked&nbsp;by&nbsp;withinMyClass()</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Join&nbsp;Point&nbsp;Kind:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getKind());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Signature:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getStaticPart().getSignature());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Source&nbsp;Line:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getStaticPart().getSourceLocation());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">-----------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<img src ="http://www.blogjava.net/zhengzhili/aggbug/224075.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2008-08-25 10:32 <a href="http://www.blogjava.net/zhengzhili/archive/2008/08/25/224075.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《AspectJ Cookbook》读书笔记八: 捕获属性上的连接点 </title><link>http://www.blogjava.net/zhengzhili/archive/2008/08/22/223678.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Fri, 22 Aug 2008 02:43:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2008/08/22/223678.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/223678.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2008/08/22/223678.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/223678.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/223678.html</trackback:ping><description><![CDATA[<p><strong>一.&nbsp;捕获何时访问对象的属性<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;使用get(Signature)切入点。get(Signature)切入点的语法如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;pointcut &lt;pointcut name&gt;(<strong>&lt;any values to be picked up&gt;</strong>) : get(<strong>&lt;optional modifier&gt; &lt;type&gt; &lt;class&gt;.&lt;field&gt;</strong>);<br />
&nbsp;&nbsp;&nbsp;&nbsp;get(Signature)具有4个关键特征：<br />
&nbsp;&nbsp;&nbsp;&nbsp;1.get(Signature)切入点会触发直接在其中(而不仅仅是在访问器方法的调用上)访问属性的通知。<br />
&nbsp;&nbsp;&nbsp;&nbsp;2.get(Signature)切入点不能捕获对静态属性的访问，尽管从AspectJ的语法角度讲以这种方式定义切入点是完全合法的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;3.Signature必须解析成特定类的属性。<br />
&nbsp;&nbsp;&nbsp;&nbsp;4.Signature可以包含通配符，用于选择不同属性上的一系列连接点。<br />
</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_46_682_Open_Image" onclick="this.style.display='none'; Codehighlighter1_46_682_Open_Text.style.display='none'; Codehighlighter1_46_682_Closed_Image.style.display='inline'; Codehighlighter1_46_682_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_46_682_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_46_682_Closed_Text.style.display='none'; Codehighlighter1_46_682_Open_Image.style.display='inline'; Codehighlighter1_46_682_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;GetRecipe&nbsp;</span><span id="Codehighlighter1_46_682_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_46_682_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_49_223_Open_Image" onclick="this.style.display='none'; Codehighlighter1_49_223_Open_Text.style.display='none'; Codehighlighter1_49_223_Closed_Image.style.display='inline'; Codehighlighter1_49_223_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_49_223_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_49_223_Closed_Text.style.display='none'; Codehighlighter1_49_223_Open_Image.style.display='inline'; Codehighlighter1_49_223_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_49_223_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">/**&nbsp;*/</span><span id="Codehighlighter1_49_223_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;whenever&nbsp;an&nbsp;attribute&nbsp;matching&nbsp;the&nbsp;following&nbsp;rules<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;is&nbsp;accessed:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Type:String&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Class&nbsp;Name:MyClass&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Attribute&nbsp;Name:name<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;getNamePointcut():&nbsp;get(String&nbsp;MyClass.name);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img id="Codehighlighter1_333_680_Open_Image" onclick="this.style.display='none'; Codehighlighter1_333_680_Open_Text.style.display='none'; Codehighlighter1_333_680_Closed_Image.style.display='inline'; Codehighlighter1_333_680_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_333_680_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_333_680_Closed_Text.style.display='none'; Codehighlighter1_333_680_Open_Image.style.display='inline'; Codehighlighter1_333_680_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;before():getNamePointcut()&nbsp;</span><span id="Codehighlighter1_333_680_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_333_680_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">----------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;----------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;picked&nbsp;by&nbsp;getNamePointcut()</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Signature:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getSignature());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Source&nbsp;Line:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getSourceLocation());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">-----------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;你可能期待类使用static和final关键字定义一个常量属性，这样，在访问这个常量时你就可能使用get(Signature)切入点来捕获。<br />
&nbsp;&nbsp;&nbsp;&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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_48_724_Open_Image" onclick="this.style.display='none'; Codehighlighter1_48_724_Open_Text.style.display='none'; Codehighlighter1_48_724_Closed_Image.style.display='inline'; Codehighlighter1_48_724_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_48_724_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_48_724_Closed_Text.style.display='none'; Codehighlighter1_48_724_Open_Image.style.display='inline'; Codehighlighter1_48_724_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;GetConstant&nbsp;</span><span id="Codehighlighter1_48_724_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_48_724_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_51_229_Open_Image" onclick="this.style.display='none'; Codehighlighter1_51_229_Open_Text.style.display='none'; Codehighlighter1_51_229_Closed_Image.style.display='inline'; Codehighlighter1_51_229_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_51_229_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_51_229_Closed_Text.style.display='none'; Codehighlighter1_51_229_Open_Image.style.display='inline'; Codehighlighter1_51_229_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_51_229_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">/**&nbsp;*/</span><span id="Codehighlighter1_51_229_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;whenever&nbsp;an&nbsp;attribute&nbsp;matching&nbsp;the&nbsp;following&nbsp;rules<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;is&nbsp;accessed:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Type:String&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Class&nbsp;Name:MyClass&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Attribute&nbsp;Name:CONSTANT<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;getConstantPointcut():get(</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;String&nbsp;MyClass.CONSTANT);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img id="Codehighlighter1_369_722_Open_Image" onclick="this.style.display='none'; Codehighlighter1_369_722_Open_Text.style.display='none'; Codehighlighter1_369_722_Closed_Image.style.display='inline'; Codehighlighter1_369_722_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_369_722_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_369_722_Closed_Text.style.display='none'; Codehighlighter1_369_722_Open_Image.style.display='inline'; Codehighlighter1_369_722_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;before():getConstantPointcut()&nbsp;</span><span id="Codehighlighter1_369_722_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_369_722_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">----------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;----------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;picked&nbsp;by&nbsp;getConstantPointcut()</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Signature:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getSignature());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Source&nbsp;Line:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getSourceLocation());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">-----------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p>&nbsp;</p>
<p><strong>二.&nbsp;捕获访问的字段值<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;使用after returning(&lt;ReturnValue&gt;)形式的通知。它在声明的returning()部分中带有一个标识符，用于包含访问过的值。<br />
<br />
</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_62_580_Open_Image" onclick="this.style.display='none'; Codehighlighter1_62_580_Open_Text.style.display='none'; Codehighlighter1_62_580_Closed_Image.style.display='inline'; Codehighlighter1_62_580_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_62_580_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_62_580_Closed_Text.style.display='none'; Codehighlighter1_62_580_Open_Image.style.display='inline'; Codehighlighter1_62_580_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;CaptureAccessedFieldValue&nbsp;</span><span id="Codehighlighter1_62_580_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_62_580_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;getNamePointcut()&nbsp;:&nbsp;get(String&nbsp;MyClass.name);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img id="Codehighlighter1_197_578_Open_Image" onclick="this.style.display='none'; Codehighlighter1_197_578_Open_Text.style.display='none'; Codehighlighter1_197_578_Closed_Image.style.display='inline'; Codehighlighter1_197_578_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_197_578_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_197_578_Closed_Text.style.display='none'; Codehighlighter1_197_578_Open_Image.style.display='inline'; Codehighlighter1_197_578_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;after()&nbsp;returning(String&nbsp;value)&nbsp;:&nbsp;getNamePointcut()&nbsp;</span><span id="Codehighlighter1_197_578_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_197_578_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">----------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;----------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;picked&nbsp;by&nbsp;getNamePointcut()</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Signature:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getStaticPart().getSignature());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Source&nbsp;Line:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getStaticPart().getSourceLocation());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">-----------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
</p>
<p><strong>三.&nbsp;捕获何时修改对象的字段<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;使用set(Signature)切入点。set(Signature)切入点的语法如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;pointcut &lt;pointcut name&gt;(&lt;any values to be picked up&gt;) : set(&lt;optional modifier&gt; &lt;type&gt; &lt;class&gt;.&lt;field&gt;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;set(Signature)具有4个关键特征：<br />
&nbsp;&nbsp;&nbsp;&nbsp;1.set(Signature)切入点在修改字段时触发。<br />
&nbsp;&nbsp;&nbsp;&nbsp;2.set(Signature)切入点不能捕获对静态字段的修改，尽管从AspectJ的语法角度讲以这种方式定义切入点是完全合法的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;3.Signature必须解析成特定类的属性。<br />
&nbsp;&nbsp;&nbsp;&nbsp;4.Signature可以包含通配符，用于选择不同属性上的一系列连接点。<br />
<br />
</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_46_701_Open_Image" onclick="this.style.display='none'; Codehighlighter1_46_701_Open_Text.style.display='none'; Codehighlighter1_46_701_Closed_Image.style.display='inline'; Codehighlighter1_46_701_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_46_701_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_46_701_Closed_Text.style.display='none'; Codehighlighter1_46_701_Open_Image.style.display='inline'; Codehighlighter1_46_701_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;SetRecipe&nbsp;</span><span id="Codehighlighter1_46_701_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_46_701_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_49_218_Open_Image" onclick="this.style.display='none'; Codehighlighter1_49_218_Open_Text.style.display='none'; Codehighlighter1_49_218_Closed_Image.style.display='inline'; Codehighlighter1_49_218_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_49_218_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_49_218_Closed_Text.style.display='none'; Codehighlighter1_49_218_Open_Image.style.display='inline'; Codehighlighter1_49_218_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_49_218_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">/**/</span><span id="Codehighlighter1_49_218_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;whenever&nbsp;an&nbsp;attribute<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;matching&nbsp;the&nbsp;following&nbsp;rules&nbsp;is&nbsp;modified:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Type:&nbsp;String<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Class&nbsp;Name:&nbsp;MyClass<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Attribute:&nbsp;name<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;setNamePointcut()&nbsp;:set(String&nbsp;MyClass.name);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img id="Codehighlighter1_350_699_Open_Image" onclick="this.style.display='none'; Codehighlighter1_350_699_Open_Text.style.display='none'; Codehighlighter1_350_699_Closed_Image.style.display='inline'; Codehighlighter1_350_699_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_350_699_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_350_699_Closed_Text.style.display='none'; Codehighlighter1_350_699_Open_Image.style.display='inline'; Codehighlighter1_350_699_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;before():setNamePointcut()&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">!</span><span style="color: #000000">within(SetRecipe</span><span style="color: #000000">+</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_350_699_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_350_699_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">----------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;----------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;picked&nbsp;by&nbsp;setNamePointcut()</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Signature:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getSignature());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Source&nbsp;Line:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getSourceLocation());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">-----------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p>&nbsp;</p>
<p><strong>四.&nbsp;在修改字段时捕获它的值<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;结合使用args([Types | Identifiers])切入点和set(Signature)切入点，展示字段的新值，该字段被设置成切入点上的标识符，可将其传递给相应的通知。<br />
</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_62_581_Open_Image" onclick="this.style.display='none'; Codehighlighter1_62_581_Open_Text.style.display='none'; Codehighlighter1_62_581_Closed_Image.style.display='inline'; Codehighlighter1_62_581_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_62_581_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_62_581_Closed_Text.style.display='none'; Codehighlighter1_62_581_Open_Image.style.display='inline'; Codehighlighter1_62_581_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;CaptureModifiedFieldValue&nbsp;</span><span id="Codehighlighter1_62_581_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_62_581_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;setNamePointcut(String&nbsp;newValue):set(String&nbsp;MyClass.name)&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;args(newValue);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img id="Codehighlighter1_228_579_Open_Image" onclick="this.style.display='none'; Codehighlighter1_228_579_Open_Text.style.display='none'; Codehighlighter1_228_579_Closed_Image.style.display='inline'; Codehighlighter1_228_579_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_228_579_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_228_579_Closed_Text.style.display='none'; Codehighlighter1_228_579_Open_Image.style.display='inline'; Codehighlighter1_228_579_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;before(String&nbsp;newValue)&nbsp;:&nbsp;setNamePointcut(newValue)&nbsp;</span><span id="Codehighlighter1_228_579_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_228_579_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">----------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;----------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;picked&nbsp;by&nbsp;setNamePointcut()</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Signature:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getSignature());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Source&nbsp;Line:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getSourceLocation());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">-----------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<img src ="http://www.blogjava.net/zhengzhili/aggbug/223678.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2008-08-22 10:43 <a href="http://www.blogjava.net/zhengzhili/archive/2008/08/22/223678.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《AspectJ Cookbook》读书笔记七: 捕获类和对象构造上的连接点</title><link>http://www.blogjava.net/zhengzhili/archive/2008/08/22/223672.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Fri, 22 Aug 2008 02:32:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2008/08/22/223672.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/223672.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2008/08/22/223672.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/223672.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/223672.html</trackback:ping><description><![CDATA[<p><strong>一. &nbsp;捕获对构造函数的调用<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;使用Call(Signature)写入点，它带有额外的new关键字作为签名的一部分。使用与构造函数有关的call(Signature)切入点的语法如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;pointcut &lt;pointcut name&gt;(<strong>&lt;any values to be picked up&gt;</strong>): call(<strong>&lt;optional modifier&gt; &lt;class&gt;.new(&lt;parameter types&gt;)</strong>);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;在用于捕获对构造函数的调用时，call(Signature)切入点具有3个关键特征：<br />
&nbsp;&nbsp;&nbsp;&nbsp;1.在把一个类实例化成一个对象时，具有new关键字的call(Signature)切入点会捕获连接点。<br />
&nbsp;&nbsp;&nbsp;&nbsp;2.通过使用around()形式的通知，call(Signature)写入点可以在Java的正常继承规则的限制下重写返回对象的类型。<br />
&nbsp;&nbsp;&nbsp;&nbsp;3.编译器不会检查指定的Signature是否对应于实际的构造函数。<br />
</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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_50_972_Open_Image" onclick="this.style.display='none'; Codehighlighter1_50_972_Open_Text.style.display='none'; Codehighlighter1_50_972_Closed_Image.style.display='inline'; Codehighlighter1_50_972_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_50_972_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_50_972_Closed_Text.style.display='none'; Codehighlighter1_50_972_Open_Image.style.display='inline'; Codehighlighter1_50_972_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;CallNewRecipe&nbsp;</span><span id="Codehighlighter1_50_972_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_50_972_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_53_301_Open_Image" onclick="this.style.display='none'; Codehighlighter1_53_301_Open_Text.style.display='none'; Codehighlighter1_53_301_Closed_Image.style.display='inline'; Codehighlighter1_53_301_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_53_301_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_53_301_Closed_Text.style.display='none'; Codehighlighter1_53_301_Open_Image.style.display='inline'; Codehighlighter1_53_301_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_53_301_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">/**/</span><span id="Codehighlighter1_53_301_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;when&nbsp;any&nbsp;constructor&nbsp;is&nbsp;called<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;that&nbsp;meets&nbsp;the&nbsp;following&nbsp;signature&nbsp;rules:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Class&nbsp;Name:MyClass<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Name:new&nbsp;(This&nbsp;is&nbsp;a&nbsp;keyword&nbsp;indicating&nbsp;the&nbsp;constructor&nbsp;call)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Parameters:&nbsp;int&nbsp;,&nbsp;String<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;myClassConstructorWithIntAndStringPointcut()&nbsp;:&nbsp;call(MyClass.</span><span style="color: #0000ff">new</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;,&nbsp;String));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img id="Codehighlighter1_474_970_Open_Image" onclick="this.style.display='none'; Codehighlighter1_474_970_Open_Text.style.display='none'; Codehighlighter1_474_970_Closed_Image.style.display='inline'; Codehighlighter1_474_970_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_474_970_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_474_970_Closed_Text.style.display='none'; Codehighlighter1_474_970_Open_Image.style.display='inline'; Codehighlighter1_474_970_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;before()&nbsp;:&nbsp;myClassConstructorWithIntAndStringPointcut()&nbsp;</span><span id="Codehighlighter1_474_970_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_474_970_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">----------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;----------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;picked&nbsp;by&nbsp;myClassConstructorWithIntAndOthersPointcut()</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">The&nbsp;current&nbsp;type&nbsp;of&nbsp;object&nbsp;under&nbsp;construction&nbsp;is:</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(thisJoinPoint.getThis());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Signature:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getSignature());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Source&nbsp;Line:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getSourceLocation());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">-----------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p><br />
<br />
<strong>二.&nbsp;在执行构造函数时捕获它<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;使用execution(Signature)切入点，它带有额外的new关键字作为签名的一部分。使用与构造函数有关的execution(Signature)切入点的语法如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;pointcut &lt;pointcut name&gt;(<strong>&lt;any values to be picked up&gt;</strong>):execution(<strong>&lt;optional modifier&gt; &lt;class&gt;.new&lt;parameter types&gt;)</strong>);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;在用于捕获构造函数的执行时，execution(Signature)切入点具有3个关键特征：<br />
&nbsp;&nbsp;&nbsp;&nbsp;1.在执行类的构造函数时，具有new关键字的execution(Signature)切入点会触发连接点。<br />
&nbsp;&nbsp;&nbsp;&nbsp;2.不能在调用类的构造函数之前那一刻触发连接点。这会阻止重写返回的对象。<br />
&nbsp;&nbsp;&nbsp;&nbsp;3.可以使用around()通知来重写构造函数方法的实现，当不能重写正在构造的对象的类型。<br />
</p>
<p><br />
</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_55_992_Open_Image" onclick="this.style.display='none'; Codehighlighter1_55_992_Open_Text.style.display='none'; Codehighlighter1_55_992_Closed_Image.style.display='inline'; Codehighlighter1_55_992_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_55_992_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_55_992_Closed_Text.style.display='none'; Codehighlighter1_55_992_Open_Image.style.display='inline'; Codehighlighter1_55_992_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;ExecutionNewRecipe&nbsp;</span><span id="Codehighlighter1_55_992_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_55_992_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_58_305_Open_Image" onclick="this.style.display='none'; Codehighlighter1_58_305_Open_Text.style.display='none'; Codehighlighter1_58_305_Closed_Image.style.display='inline'; Codehighlighter1_58_305_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_58_305_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_58_305_Closed_Text.style.display='none'; Codehighlighter1_58_305_Open_Image.style.display='inline'; Codehighlighter1_58_305_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_58_305_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">/**/</span><span id="Codehighlighter1_58_305_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;when&nbsp;any&nbsp;constructor&nbsp;executes<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;that&nbsp;meets&nbsp;the&nbsp;following&nbsp;signature&nbsp;rules:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Class&nbsp;Name:MyClass<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Name:new&nbsp;(This&nbsp;is&nbsp;a&nbsp;keyword&nbsp;indicating&nbsp;the&nbsp;constructor&nbsp;call)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Parameters:&nbsp;int&nbsp;,&nbsp;String<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;myClassConstructorWithIntAndStringPointcut()&nbsp;:&nbsp;execution(MyClass.</span><span style="color: #0000ff">new</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">,String));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img id="Codehighlighter1_481_990_Open_Image" onclick="this.style.display='none'; Codehighlighter1_481_990_Open_Text.style.display='none'; Codehighlighter1_481_990_Closed_Image.style.display='inline'; Codehighlighter1_481_990_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_481_990_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_481_990_Closed_Text.style.display='none'; Codehighlighter1_481_990_Open_Image.style.display='inline'; Codehighlighter1_481_990_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;before()&nbsp;:&nbsp;myClassConstructorWithIntAndStringPointcut()&nbsp;</span><span id="Codehighlighter1_481_990_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_481_990_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">----------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;----------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;picked&nbsp;by&nbsp;myClassConstructorWithIntAndOthersPointcut()</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">The&nbsp;current&nbsp;type&nbsp;of&nbsp;object&nbsp;under&nbsp;construction&nbsp;is:</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(thisJoinPoint.getThis().getClass());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Signature:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getSignature());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Source&nbsp;Line:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getSourceLocation());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">-----------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
<strong>三.&nbsp;捕获何时初始化对象<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;使用initialization(Signature)切入点。initialization(Signature)切入点的语法如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;pointcut &lt;pointcut name&gt;(<strong>&lt;any values to be picked up&gt;</strong>):initialization(<strong>&lt;optional modifier&gt; &lt;class&gt;.new&lt;parameter types&gt;)</strong>);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;initialization(Signature)切入点具有5个关键特征：<br />
&nbsp;&nbsp;&nbsp;&nbsp;1.initialization(Signature)切入点必须包含new关键字。<br />
&nbsp;&nbsp;&nbsp;&nbsp;2.initialization(Signature)切入点捕获连接点发生在任何超类的初始化之后，以及从构造函数方法返回之前。<br />
&nbsp;&nbsp;&nbsp;&nbsp;3.Signature必须解析成特定类的构造函数，而不是一个简单的方法。<br />
&nbsp;&nbsp;&nbsp;&nbsp;4.initialization(Signature)切入点提供了编译时的检查，用于检查构造函数是否正在被引用。<br />
&nbsp;&nbsp;&nbsp;&nbsp;5.由于AspectJ编译器中的编译器限制，当与around()通知关联时，不能使用initialization(Signature)切入点。</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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_58_1045_Open_Image" onclick="this.style.display='none'; Codehighlighter1_58_1045_Open_Text.style.display='none'; Codehighlighter1_58_1045_Closed_Image.style.display='inline'; Codehighlighter1_58_1045_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_58_1045_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_58_1045_Closed_Text.style.display='none'; Codehighlighter1_58_1045_Open_Image.style.display='inline'; Codehighlighter1_58_1045_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;InitializationRecipe&nbsp;</span><span id="Codehighlighter1_58_1045_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_58_1045_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_61_336_Open_Image" onclick="this.style.display='none'; Codehighlighter1_61_336_Open_Text.style.display='none'; Codehighlighter1_61_336_Closed_Image.style.display='inline'; Codehighlighter1_61_336_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_61_336_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_61_336_Closed_Text.style.display='none'; Codehighlighter1_61_336_Open_Image.style.display='inline'; Codehighlighter1_61_336_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_61_336_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">/**/</span><span id="Codehighlighter1_61_336_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;when&nbsp;any&nbsp;object<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;initializes&nbsp;using&nbsp;a&nbsp;constructor<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;that&nbsp;meets&nbsp;the&nbsp;following&nbsp;signature&nbsp;rules:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Class&nbsp;Name:MyClass<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Name:new&nbsp;(This&nbsp;is&nbsp;a&nbsp;keyword&nbsp;indicating&nbsp;the&nbsp;constructor&nbsp;call)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Parameters:&nbsp;int&nbsp;and&nbsp;any&nbsp;others<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;myClassObjectInitializationWithIntAndStringPointcut()&nbsp;:&nbsp;execution(MyClass.</span><span style="color: #0000ff">new</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">,</span><span style="color: #000000">*</span><span style="color: #000000">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img id="Codehighlighter1_525_1043_Open_Image" onclick="this.style.display='none'; Codehighlighter1_525_1043_Open_Text.style.display='none'; Codehighlighter1_525_1043_Closed_Image.style.display='inline'; Codehighlighter1_525_1043_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_525_1043_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_525_1043_Closed_Text.style.display='none'; Codehighlighter1_525_1043_Open_Image.style.display='inline'; Codehighlighter1_525_1043_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;before()&nbsp;:&nbsp;myClassObjectInitializationWithIntAndStringPointcut()&nbsp;</span><span id="Codehighlighter1_525_1043_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_525_1043_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">----------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;----------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;picked&nbsp;by&nbsp;myClassObjectInitializationWithIntAndStringPointcut()</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">The&nbsp;current&nbsp;type&nbsp;of&nbsp;object&nbsp;under&nbsp;construction&nbsp;is:</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(thisJoinPoint.getThis().getClass());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Signature:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getSignature());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Source&nbsp;Line:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getSourceLocation());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">-----------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
<br />
<strong>四.&nbsp;捕获何时将要初始化一个对象<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;使用preinitialization(Signature)切入点。preinitialization(Signature)切入点的语法如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;pointcut &lt;pointcut name&gt;(<strong>&lt;any values to be picked up&gt;</strong>):preinitialization(<strong>&lt;optional modifier&gt; &lt;class&gt;.new&lt;parameter types&gt;)</strong>);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;preinitialization(Signature)切入点具有5个关键特征：<br />
&nbsp;&nbsp;&nbsp;&nbsp;1.preinitialization(Signature)切入点必须包含new关键字。<br />
&nbsp;&nbsp;&nbsp;&nbsp;2.preinitialization(Signature)切入点捕获连接点发生在进入捕获构造函数之后，以及调用任何超类构造函数之前。<br />
&nbsp;&nbsp;&nbsp;&nbsp;3.Signature必须解析成一个构造函数。<br />
&nbsp;&nbsp;&nbsp;&nbsp;4.preinitialization(Signature)切入点提供了编译时的检查，用于检查构造函数是否正在被引用。<br />
&nbsp;&nbsp;&nbsp;&nbsp;5.由于AspectJ编译器中的编译器限制，当与around()通知关联时，不能使用preinitialization(Signature)切入点。</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"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_60_1164_Open_Image" onclick="this.style.display='none'; Codehighlighter1_60_1164_Open_Text.style.display='none'; Codehighlighter1_60_1164_Closed_Image.style.display='inline'; Codehighlighter1_60_1164_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_60_1164_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_60_1164_Closed_Text.style.display='none'; Codehighlighter1_60_1164_Open_Image.style.display='inline'; Codehighlighter1_60_1164_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;PreInitializationRecipe&nbsp;</span><span id="Codehighlighter1_60_1164_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_60_1164_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_63_349_Open_Image" onclick="this.style.display='none'; Codehighlighter1_63_349_Open_Text.style.display='none'; Codehighlighter1_63_349_Closed_Image.style.display='inline'; Codehighlighter1_63_349_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_63_349_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_63_349_Closed_Text.style.display='none'; Codehighlighter1_63_349_Open_Image.style.display='inline'; Codehighlighter1_63_349_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_63_349_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">/**/</span><span id="Codehighlighter1_63_349_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;just&nbsp;before&nbsp;an&nbsp;object&nbsp;initializes<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;using&nbsp;a&nbsp;constructor&nbsp;that&nbsp;meets&nbsp;the&nbsp;following&nbsp;signature&nbsp;rules:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Class&nbsp;Name:MyClass<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Name:new&nbsp;(This&nbsp;is&nbsp;a&nbsp;keyword&nbsp;indicating&nbsp;the&nbsp;constructor&nbsp;call)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;Parameters:&nbsp;an&nbsp;int&nbsp;followed&nbsp;by&nbsp;a&nbsp;String<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;myClassIntStringObjectPreInitializationPointcut()&nbsp;:&nbsp;preinitialization(MyClass.</span><span style="color: #0000ff">new</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">,String));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img id="Codehighlighter1_590_1162_Open_Image" onclick="this.style.display='none'; Codehighlighter1_590_1162_Open_Text.style.display='none'; Codehighlighter1_590_1162_Closed_Image.style.display='inline'; Codehighlighter1_590_1162_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_590_1162_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_590_1162_Closed_Text.style.display='none'; Codehighlighter1_590_1162_Open_Image.style.display='inline'; Codehighlighter1_590_1162_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;before(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;number&nbsp;,&nbsp;String&nbsp;name)&nbsp;:&nbsp;myClassIntStringObjectPreInitializationPointcut()&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;args(number&nbsp;,&nbsp;name)&nbsp;</span><span id="Codehighlighter1_590_1162_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_590_1162_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">----------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;----------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;picked&nbsp;by&nbsp;anyMyClassObjectInitializationPointcut()</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">The&nbsp;current&nbsp;type&nbsp;of&nbsp;object&nbsp;under&nbsp;construction&nbsp;is:</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(thisJoinPoint.getThis());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">The&nbsp;values&nbsp;passed&nbsp;in&nbsp;where:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;number&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;name);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Signature:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getSignature());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Source&nbsp;Line:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getSourceLocation());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">-----------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
<br />
<strong>五.&nbsp;捕获何时初始化类</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;使用staticinitialization(TypePattern)写入点。staticinitialization(TypePattern)写入点的语法如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;pointcut &lt;pointcout name&gt;(<strong>&lt;any values to be picked up&gt;</strong>) : staticinitialization(&lt;class&gt;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;staticinitialization(TypePattern)切入点具有两个关键特征：<br />
&nbsp;&nbsp;&nbsp;&nbsp;1.对可供staticinitialization(TypePattern)切入点所选通知使用的环境有一些限制。没有父对象触发静态初始化；因此，没有this引用。也不涉及实例对象，因此，没有目标引用。<br />
&nbsp;&nbsp;&nbsp;&nbsp;2.TypePattern可以包含通配符，用于选择一系列不同的类。<br />
<br />
</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_63_840_Open_Image" onclick="this.style.display='none'; Codehighlighter1_63_840_Open_Text.style.display='none'; Codehighlighter1_63_840_Closed_Image.style.display='inline'; Codehighlighter1_63_840_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_63_840_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_63_840_Closed_Text.style.display='none'; Codehighlighter1_63_840_Open_Image.style.display='inline'; Codehighlighter1_63_840_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;StaticinitializationRecipe&nbsp;</span><span id="Codehighlighter1_63_840_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_63_840_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_66_206_Open_Image" onclick="this.style.display='none'; Codehighlighter1_66_206_Open_Text.style.display='none'; Codehighlighter1_66_206_Closed_Image.style.display='inline'; Codehighlighter1_66_206_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_66_206_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_66_206_Closed_Text.style.display='none'; Codehighlighter1_66_206_Open_Image.style.display='inline'; Codehighlighter1_66_206_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_66_206_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">/**/</span><span id="Codehighlighter1_66_206_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;when&nbsp;a&nbsp;class&nbsp;is&nbsp;initialized<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;that&nbsp;meets&nbsp;the&nbsp;following&nbsp;type&nbsp;pattern&nbsp;rules:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Class&nbsp;Name:MyClass<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;myClassStaticInitializationPointcut()&nbsp;:&nbsp;staticinitialization(MyClass);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img id="Codehighlighter1_363_838_Open_Image" onclick="this.style.display='none'; Codehighlighter1_363_838_Open_Text.style.display='none'; Codehighlighter1_363_838_Closed_Image.style.display='inline'; Codehighlighter1_363_838_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_363_838_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_363_838_Closed_Text.style.display='none'; Codehighlighter1_363_838_Open_Image.style.display='inline'; Codehighlighter1_363_838_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;before()&nbsp;:&nbsp;myClassStaticInitializationPointcut()&nbsp;</span><span id="Codehighlighter1_363_838_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_363_838_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">----------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;----------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;picked&nbsp;by&nbsp;myClassStaticInitializationPointcut()</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Join&nbsp;Point&nbsp;Kind:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(thisJoinPoint.getStaticPart().getKind());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Signature:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getSignature());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Source&nbsp;Line:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getSourceLocation());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">-----------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<img src ="http://www.blogjava.net/zhengzhili/aggbug/223672.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2008-08-22 10:32 <a href="http://www.blogjava.net/zhengzhili/archive/2008/08/22/223672.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《AspectJ Cookbook》读书笔记五: 捕获异常处理上的连接点</title><link>http://www.blogjava.net/zhengzhili/archive/2008/07/11/214171.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Fri, 11 Jul 2008 01:28:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2008/07/11/214171.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/214171.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2008/07/11/214171.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/214171.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/214171.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;在Java中抛出异常时，会将其向上传递给调用者，直到它被作为try/catch块一部分的catch语句处理或者到达Java运行库并在控制台引发一条混乱的消息。如果捕获到异常，就应该将异常作为一个对象传递给catch块做合适的处理。同时，还有一种可能需要方面作为横切行为做一部分事情，或者替代catch块的正常行为。<br />
<strong>一. 捕获何时捕捉异常</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;使用handler(TypePattern)切入点。其语法如下:<br />
&nbsp;&nbsp;&nbsp;&nbsp;pointcut &lt;pointcut name&gt;(<strong>&lt;any values to be picked up&gt;</strong>) : handler(<strong>&lt;class&gt;</strong>):<br />
&nbsp; <br />
&nbsp;&nbsp; handler(TypePattern)切入点具有5个关键特征：<br />
&nbsp;&nbsp; 1. handler(TypePattern)在捕获异常的作用域内选择连接点。<br />
&nbsp;&nbsp;&nbsp;2. handler(TypePattern)切入点的通知仅用于类型模式指定Throwable或其子类的地方。<br />
&nbsp;&nbsp; 3. TypePattern声明无论何时捕捉到异常或其子类的匹配模式，都会应用相应的通知。<br />
&nbsp;&nbsp; 4. handler(TypePattern)切入点只支持before()形式的通知。这意味着不能使用像around()这样的通知来重写catch块的正常行为。<br />
&nbsp;&nbsp; 5. TypePattern可以包含通配符，用于选择不同类上的一系列连接点。<br />
<table cellspacing="2" cellpadding="2" width="500" border="0">
    <tbody>
        <tr>
            <td style="background-color: #c0c0c0">带有通配符的TypePattern</td>
            <td style="background-color: #c0c0c0">描述</td>
        </tr>
        <tr>
            <td>mypackage..*</td>
            <td>捕获mypackage包及其子包中的连接点类</td>
        </tr>
        <tr>
            <td>MyClass+</td>
            <td>捕获MyClass类及其任何子类中的连接点</td>
        </tr>
    </tbody>
</table>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;下面的例子展示了捕获任何类抛出MyException类异常：</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_50_761_Open_Image" onclick="this.style.display='none'; Codehighlighter1_50_761_Open_Text.style.display='none'; Codehighlighter1_50_761_Closed_Image.style.display='inline'; Codehighlighter1_50_761_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_50_761_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_50_761_Closed_Text.style.display='none'; Codehighlighter1_50_761_Open_Image.style.display='inline'; Codehighlighter1_50_761_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;HandlerRecipe&nbsp;</span><span id="Codehighlighter1_50_761_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_50_761_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_53_215_Open_Image" onclick="this.style.display='none'; Codehighlighter1_53_215_Open_Text.style.display='none'; Codehighlighter1_53_215_Closed_Image.style.display='inline'; Codehighlighter1_53_215_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_53_215_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_53_215_Closed_Text.style.display='none'; Codehighlighter1_53_215_Open_Image.style.display='inline'; Codehighlighter1_53_215_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_53_215_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">/**&nbsp;*/</span><span id="Codehighlighter1_53_215_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Specifies&nbsp;calling&nbsp;advice&nbsp;when&nbsp;any&nbsp;exception&nbsp;object<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;is&nbsp;caught&nbsp;that&nbsp;matches&nbsp;the&nbsp;following&nbsp;rules&nbsp;for&nbsp;its&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;type&nbsp;pattern;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Type:MyException<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;myExceptionHandlerPointcut()&nbsp;:&nbsp;handler(MyException);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img id="Codehighlighter1_345_759_Open_Image" onclick="this.style.display='none'; Codehighlighter1_345_759_Open_Text.style.display='none'; Codehighlighter1_345_759_Closed_Image.style.display='inline'; Codehighlighter1_345_759_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_345_759_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_345_759_Closed_Text.style.display='none'; Codehighlighter1_345_759_Open_Image.style.display='inline'; Codehighlighter1_345_759_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;before()&nbsp;:&nbsp;myExceptionHandlerPointcut()&nbsp;</span><span id="Codehighlighter1_345_759_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_345_759_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">-------------------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;-------------------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;picked&nbsp;by&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">myExceptionHandlerPointcut()</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Signature:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getStaticPart().getSignature());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Source&nbsp;Line:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getStaticPart().getSourceLocation());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">------------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
二. 捕获抛出的异常<br />
&nbsp;&nbsp;&nbsp;&nbsp;结合使用args([Types | Identifiers])切入点&nbsp;与handler(TypePattern)切入点，将捕获的异常展示为切入点上的标识符，可将其传递给相应的通知。<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.aspectj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_58_748_Open_Image" onclick="this.style.display='none'; Codehighlighter1_58_748_Open_Text.style.display='none'; Codehighlighter1_58_748_Closed_Image.style.display='inline'; Codehighlighter1_58_748_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_58_748_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_58_748_Closed_Text.style.display='none'; Codehighlighter1_58_748_Open_Image.style.display='inline'; Codehighlighter1_58_748_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;AccessThrownException&nbsp;</span><span id="Codehighlighter1_58_748_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_58_748_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;myExceptionHandlerPointout(MyException&nbsp;exception)&nbsp;:&nbsp;handler(MyException)&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;args(exception);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Advice&nbsp;declaration</span><span style="color: #008000"><br />
<img id="Codehighlighter1_258_746_Open_Image" onclick="this.style.display='none'; Codehighlighter1_258_746_Open_Text.style.display='none'; Codehighlighter1_258_746_Closed_Image.style.display='inline'; Codehighlighter1_258_746_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_258_746_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_258_746_Closed_Text.style.display='none'; Codehighlighter1_258_746_Open_Image.style.display='inline'; Codehighlighter1_258_746_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;before(MyException&nbsp;exception)&nbsp;:&nbsp;myExceptionHandlerPointout(exception)&nbsp;</span><span id="Codehighlighter1_258_746_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_258_746_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">-------------------&nbsp;Aspect&nbsp;Advice&nbsp;Logic&nbsp;-------------------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;picked&nbsp;by&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">myExceptionHandlerPointcut()</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Signature:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getStaticPart().getSignature());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Source&nbsp;Line:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;thisJoinPoint.getStaticPart().getSourceLocation());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Exception&nbsp;caught:</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exception.printStackTrace();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">------------------------------------------</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
&nbsp;&nbsp;&nbsp;
<img src ="http://www.blogjava.net/zhengzhili/aggbug/214171.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2008-07-11 09:28 <a href="http://www.blogjava.net/zhengzhili/archive/2008/07/11/214171.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《AspectJ Cookbook》读书笔记四: 捕获方法上的连接点</title><link>http://www.blogjava.net/zhengzhili/archive/2008/07/03/212424.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Thu, 03 Jul 2008 14:17:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2008/07/03/212424.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/212424.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2008/07/03/212424.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/212424.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/212424.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一. 捕获方法调用&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用call(Signature)切入点。其语法：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pointcut &lt;pointcut name&gt;(&lt;any values to be picked u...&nbsp;&nbsp;<a href='http://www.blogjava.net/zhengzhili/archive/2008/07/03/212424.html'>阅读全文</a><img src ="http://www.blogjava.net/zhengzhili/aggbug/212424.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2008-07-03 22:17 <a href="http://www.blogjava.net/zhengzhili/archive/2008/07/03/212424.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《AspectJ Cookbook》读书笔记二: 初始AspectJ</title><link>http://www.blogjava.net/zhengzhili/archive/2008/06/30/209944.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Mon, 30 Jun 2008 15:10:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2008/06/30/209944.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/209944.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2008/06/30/209944.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/209944.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/209944.html</trackback:ping><description><![CDATA[<strong>一.&nbsp;安装AspectJ</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;从最简单的方面来说，AspectJ安装很简单：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.从http://www.aspectj.org下载最新版本(目前版本是1.6.0)。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.通过双击下载下来的JAR来安装。其默认安装目录为asprctj1.6目录。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.可在安装目录的bin目录下调用ajc命令查看帮助。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.使用AspectJ只需复制aspectjrt.jar即可。<br />
<br />
<strong>二. 第一个简单的方面<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong>简单的业务逻辑Java类<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: #0000ff">package</span><span style="color: #000000">&nbsp;com.oreilly.aspectjcookbook;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img id="Codehighlighter1_59_335_Open_Image" onclick="this.style.display='none'; Codehighlighter1_59_335_Open_Text.style.display='none'; Codehighlighter1_59_335_Closed_Image.style.display='inline'; Codehighlighter1_59_335_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_59_335_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_59_335_Closed_Text.style.display='none'; Codehighlighter1_59_335_Open_Image.style.display='inline'; Codehighlighter1_59_335_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MyClass&nbsp;</span><span id="Codehighlighter1_59_335_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_59_335_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_104_157_Open_Image" onclick="this.style.display='none'; Codehighlighter1_104_157_Open_Text.style.display='none'; Codehighlighter1_104_157_Closed_Image.style.display='inline'; Codehighlighter1_104_157_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_104_157_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_104_157_Closed_Text.style.display='none'; Codehighlighter1_104_157_Open_Image.style.display='inline'; Codehighlighter1_104_157_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;foo(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;number&nbsp;,&nbsp;String&nbsp;name)&nbsp;</span><span id="Codehighlighter1_104_157_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_104_157_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Inside&nbsp;foo(int&nbsp;,&nbsp;String)</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_201_333_Open_Image" onclick="this.style.display='none'; Codehighlighter1_201_333_Open_Text.style.display='none'; Codehighlighter1_201_333_Closed_Image.style.display='inline'; Codehighlighter1_201_333_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_201_333_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_201_333_Closed_Text.style.display='none'; Codehighlighter1_201_333_Open_Image.style.display='inline'; Codehighlighter1_201_333_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id="Codehighlighter1_201_333_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_201_333_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Create&nbsp;an&nbsp;instance&nbsp;of&nbsp;MyClass</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyClass&nbsp;myObject&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MyClass();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Make&nbsp;the&nbsp;call&nbsp;to&nbsp;foo</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myObject.foo(</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Russ&nbsp;Miles</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><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; AspectJ的简单的HelloWorld方面<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: #0000ff">package</span><span style="color: #000000">&nbsp;com.oreilly.aspectjcookbook;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img id="Codehighlighter1_63_300_Open_Image" onclick="this.style.display='none'; Codehighlighter1_63_300_Open_Text.style.display='none'; Codehighlighter1_63_300_Closed_Image.style.display='inline'; Codehighlighter1_63_300_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_63_300_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_63_300_Closed_Text.style.display='none'; Codehighlighter1_63_300_Open_Image.style.display='inline'; Codehighlighter1_63_300_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;HelloWorld&nbsp;</span><span id="Codehighlighter1_63_300_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_63_300_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;callPointcut()&nbsp;:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call(</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;com.oreilly.aspectjcookbook.MyClass.foo(</span><span style="color: #0000ff">int</span><span style="color: #000000">,String));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_189_298_Open_Image" onclick="this.style.display='none'; Codehighlighter1_189_298_Open_Text.style.display='none'; Codehighlighter1_189_298_Closed_Image.style.display='inline'; Codehighlighter1_189_298_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_189_298_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_189_298_Closed_Text.style.display='none'; Codehighlighter1_189_298_Open_Image.style.display='inline'; Codehighlighter1_189_298_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;before()&nbsp;:&nbsp;callPointcut()&nbsp;</span><span id="Codehighlighter1_189_298_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_189_298_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Hello&nbsp;World</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;attached&nbsp;to&nbsp;the&nbsp;call&nbsp;pointcut</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<br />
将上述两个文件保存在同一目录中，运行ajc命令，编译这两个文件，并产生方面和类的.class文件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ajc -classpath %MY_CLASSPATH% -d %MY_DESTINATION_DIRECTORY% com/oreilly/aspectjcookbook/MyClass.java com/oreilly/aspectjcookbook/HelloWorld.java<br />
在使用上述命令过程中，需要确保aspectjrt.jar在你的类路径中。<br />
ajc编译器会将产生两个.class文件：MyClass.class和HelloWorld.class。并可通过正常的java命令来运行：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java -classpath %MY_CLASSPATH% com.oreilly.aspectjcookbook.MyClass<br />
可得到如下结果：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hello World<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; In the advice attached to the call pointcut&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Inside foo(int , String)<br />
是不是很简单呢？现在我们来分析一下方面的每一行的含义：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.oreilly.aspectjcookbook;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img id="Codehighlighter1_63_300_Open_Image" onclick="this.style.display='none'; Codehighlighter1_63_300_Open_Text.style.display='none'; Codehighlighter1_63_300_Closed_Image.style.display='inline'; Codehighlighter1_63_300_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_63_300_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_63_300_Closed_Text.style.display='none'; Codehighlighter1_63_300_Open_Image.style.display='inline'; Codehighlighter1_63_300_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;HelloWorld&nbsp;</span><span id="Codehighlighter1_63_300_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_63_300_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;pointcut&nbsp;callPointcut()&nbsp;:<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call(</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;com.oreilly.aspectjcookbook.MyClass.foo(</span><span style="color: #0000ff">int</span><span style="color: #000000">,String));<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img id="Codehighlighter1_189_298_Open_Image" onclick="this.style.display='none'; Codehighlighter1_189_298_Open_Text.style.display='none'; Codehighlighter1_189_298_Closed_Image.style.display='inline'; Codehighlighter1_189_298_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_189_298_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_189_298_Closed_Text.style.display='none'; Codehighlighter1_189_298_Open_Image.style.display='inline'; Codehighlighter1_189_298_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;before()&nbsp;:&nbsp;callPointcut()&nbsp;</span><span id="Codehighlighter1_189_298_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_189_298_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Hello&nbsp;World</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">In&nbsp;the&nbsp;advice&nbsp;attached&nbsp;to&nbsp;the&nbsp;call&nbsp;pointcut</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<p><br />
&nbsp;第3行声明了一个方法。<br />
&nbsp;第4行和第5行声明单一命名的切入点的逻辑。切入点逻辑指定了应用程序中的任何连接点，本例中会捕获对void com.oreilly.aspectjcookbook.MyClass.foo(int,String)方法的调用。切入点被命名为callPointcut()，使得可以在方面的作用域内的任意位置都可以引用它。<br />
&nbsp;第8行到11行声明单一通知块。before()通知只是简单地指出它将在任何被callPointcut()切入点匹配的连接点之前执行。 <br />
<strong>注意：</strong>除了.java可作为后缀名以外，.aj也可以作为后缀名使用。ajc工具都会编译所提供的文件。两者没有区别，只是个人喜好而已。<br />
<br />
<strong>三. 编译一个方面和多个Java文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;</strong>如果需要多个文件，那么按上述方法编译是一件痛苦的事情。好在我们可以编写一个AspectJ配置构建文件。配置构建文件的后缀名为.lst，其中包含了所有在编译中需要使用的类文件和方面的名称。如：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //File in file.lst<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; com/oreilly/aspectjcookbook/MyClass.java<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; com/oreilly/aspectjcookbook/MyAspect.java<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; com/oreilly/aspectjcookbook/AnotherClass.java<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; com/oreilly/aspectjcookbook/AnotherAspect.java<br />
然后使用如下命令编译：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ajc -argfile file.lst -classpath %MY_CLASSPATH% -d %MY_DESTINATION_DIRECTORY%<br />
<br />
<strong>四. 织入方面到jar中</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;1.首先编译MyClass.java并打包到MyApp.jar中<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java -classpath %MY_CLASSPATH% -d %MY_DESTINATION_DIRECTORY% com/oreilly/aspectjcookbook/MyClass.java<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jar -cvf MyApp.jar com/oreilly/aspectjcookbook/MyClass.class<br />
&nbsp;&nbsp;&nbsp; 2.ajc -classpath %MY_CLASSPATH% -d %MY_DESTINATION_DIRECTORY% <strong>-inpath MyApp.jar</strong> com/oreilly/aspectjcookbook/HelloWorld.java <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -inpath选项强制ajc编译器从提供的.jar文件中把Java字节码提取到-d选项所指定的目录中。然后，ajc编译器将把字节码在方面织入过程中。<br />
&nbsp;&nbsp;&nbsp; 3. 上述命令并不会产生新的.jar包，如需要将方面织入到新的包中，则需要使用-ourjar选项：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ajc -classpath %MY_CLASSPATH% -d %MY_DESTINATION_DIRECTORY% <strong>-inpath MyApp.jar -outjar MyAspectOriente的App.jar</strong>&nbsp;com/oreilly/aspectjcookbook/HelloWorld.java </p>
<p><strong>五．其他<br />
</strong>　　aj命令可以加载时织入方面<br />
　　ajdoc则可生成Javadoc文档<br />
<br />
六. 使用Ant构建一个AspectJ项目<br />
</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="utf-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">project&nbsp;</span><span style="color: #ff0000">basedir</span><span style="color: #0000ff">="."</span><span style="color: #ff0000">&nbsp;default</span><span style="color: #0000ff">="compile"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="test"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&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">="src"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="src"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&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">="build"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="build"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">taskdef&nbsp;</span><span style="color: #ff0000">resource</span><span style="color: #0000ff">="org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">classpath</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">pathelement&nbsp;</span><span style="color: #ff0000">location</span><span style="color: #0000ff">="%ASPECTJ_INSTALLATION%/lib/aspectjtools.jar"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">classpath</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">taskdef</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">target&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="compile"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mkdir&nbsp;</span><span style="color: #ff0000">dir</span><span style="color: #0000ff">="${build}"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">iajc&nbsp;</span><span style="color: #ff0000">destdir</span><span style="color: #0000ff">="${build}"</span><span style="color: #ff0000">&nbsp;sourceroots</span><span style="color: #0000ff">="${src}"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">classpath</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&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">pathelement&nbsp;</span><span style="color: #ff0000">location</span><span style="color: #0000ff">="%ASPECTJ_INSTALLATION%/lib/aspectjrt.jar"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">classpath</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">iajc</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">project</span><span style="color: #0000ff">&gt;</span></div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;上述代码所做的工作：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. 使用AspectJ任务属性定义了一个新的任务<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. 指定aspectjtools.jar的位置<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3. 声明一个构建目标，他使用iajc任务来编译项目，这个任务反过来又依赖于aspectjrt.jarlai
<img src ="http://www.blogjava.net/zhengzhili/aggbug/209944.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2008-06-30 23:10 <a href="http://www.blogjava.net/zhengzhili/archive/2008/06/30/209944.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《AspectJ Cookbook》读书笔记一: 面向方面的概述</title><link>http://www.blogjava.net/zhengzhili/archive/2008/06/22/209943.html</link><dc:creator>Brian</dc:creator><author>Brian</author><pubDate>Sun, 22 Jun 2008 15:34:00 GMT</pubDate><guid>http://www.blogjava.net/zhengzhili/archive/2008/06/22/209943.html</guid><wfw:comment>http://www.blogjava.net/zhengzhili/comments/209943.html</wfw:comment><comments>http://www.blogjava.net/zhengzhili/archive/2008/06/22/209943.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhengzhili/comments/commentRss/209943.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhengzhili/services/trackbacks/209943.html</trackback:ping><description><![CDATA[<p><strong>横切关注点</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;面向对象编程的基本前提就是让开发人员能够在软件中表述模块化的横切关注点(crosscutting concern)。横切关注点是跨软件特定部分使用的一种行为，通常也是一种数据。它可能是一种约束，作为软件本身的一种特征，或者只是所有类都必须执行的一种行为。<br />
<br />
<strong>方面<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;方面(aspect)是横切关注点的另一种称呼。方面提供了一种机制，利用该机制，可以用一种模块化的方式指定横切关注点。为了充分利用方面的威力，我们需要了解一些基本概念，以便用一般的方式指定和应用方面。我们必须能够：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以模块化的方式定义方面<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;动态地应用方面<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;根据一组规则应用方面<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;根据一种机制和一种环境，用于指定将为特定方面执行的代码<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;面向方面方法提供了一组语义和语法构造来满足这些要求，使得无论编写的是哪一类软件，都可以一般地应用方面。这些构造就是通知(advice)、连接点(join point)和切入点(pointcut)。<br />
<br />
<strong>&nbsp;通知<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通知就是方面被调用时所执行的代码。通知包好自身的一组规则。这组规则规定了何时调用通知，这是与被触发的连接点相关的。<br />
<br />
<strong>&nbsp;连接点<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;连接点就是可能会或者可能不会调用某个通知的应用程序内的特定点。AspectJ中支持的连接点：<br />
&nbsp;&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;&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;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp; 在执行处理程序时连接<br />
<br />
<strong>&nbsp;切入点<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;切入点是用于声明连接点中关注AspectJ机制，用来发起一份通知。</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MyClass<br />
<img id="Codehighlighter1_21_311_Open_Image" onclick="this.style.display='none'; Codehighlighter1_21_311_Open_Text.style.display='none'; Codehighlighter1_21_311_Closed_Image.style.display='inline'; Codehighlighter1_21_311_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_21_311_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_21_311_Closed_Text.style.display='none'; Codehighlighter1_21_311_Open_Image.style.display='inline'; Codehighlighter1_21_311_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_21_311_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_21_311_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;foo(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;number,String&nbsp;name)<br />
<img id="Codehighlighter1_67_121_Open_Image" onclick="this.style.display='none'; Codehighlighter1_67_121_Open_Text.style.display='none'; Codehighlighter1_67_121_Closed_Image.style.display='inline'; Codehighlighter1_67_121_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_67_121_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_67_121_Closed_Text.style.display='none'; Codehighlighter1_67_121_Open_Image.style.display='inline'; Codehighlighter1_67_121_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span id="Codehighlighter1_67_121_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_67_121_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Inside&nbsp;foo(int,String)</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)<br />
<img id="Codehighlighter1_167_309_Open_Image" onclick="this.style.display='none'; Codehighlighter1_167_309_Open_Text.style.display='none'; Codehighlighter1_167_309_Closed_Image.style.display='inline'; Codehighlighter1_167_309_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_167_309_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_167_309_Closed_Text.style.display='none'; Codehighlighter1_167_309_Open_Image.style.display='inline'; Codehighlighter1_167_309_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span id="Codehighlighter1_167_309_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_167_309_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Create&nbsp;an&nbsp;instance&nbsp;of&nbsp;MyClass</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;MyClass&nbsp;myObject&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MyClass();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Make&nbsp;the&nbsp;call&nbsp;to&nbsp;foo</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;myObject.foo(</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Russ&nbsp;Miles</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;上述类中每一条语句都可看做是潜在的<strong>连接点</strong>。而下述类中则分别申明了切入点和通知。<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;aspect&nbsp;Some&nbsp;Aspect<br />
<img id="Codehighlighter1_26_173_Open_Image" onclick="this.style.display='none'; Codehighlighter1_26_173_Open_Text.style.display='none'; Codehighlighter1_26_173_Closed_Image.style.display='inline'; Codehighlighter1_26_173_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_26_173_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_26_173_Closed_Text.style.display='none'; Codehighlighter1_26_173_Open_Image.style.display='inline'; Codehighlighter1_26_173_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_26_173_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_26_173_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">A&nbsp;Pointcut&nbsp;declaration</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;pointcut&nbsp;somePointcut():</span><span style="color: #000000">&lt;</span><span style="color: #000000">pointcut&nbsp;logic</span><span style="color: #000000">&gt;</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">A&nbsp;block&nbsp;of&nbsp;Advise</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;before:somePointcut()<br />
<img id="Codehighlighter1_148_171_Open_Image" onclick="this.style.display='none'; Codehighlighter1_148_171_Open_Text.style.display='none'; Codehighlighter1_148_171_Closed_Image.style.display='inline'; Codehighlighter1_148_171_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_148_171_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_148_171_Closed_Text.style.display='none'; Codehighlighter1_148_171_Open_Image.style.display='inline'; Codehighlighter1_148_171_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span id="Codehighlighter1_148_171_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_148_171_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Do&nbsp;something</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
 <img src ="http://www.blogjava.net/zhengzhili/aggbug/209943.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhengzhili/" target="_blank">Brian</a> 2008-06-22 23:34 <a href="http://www.blogjava.net/zhengzhili/archive/2008/06/22/209943.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>