﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-技术交流-随笔分类-Spring</title><link>http://www.blogjava.net/pitey/category/37529.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 11 Feb 2009 04:05:47 GMT</lastBuildDate><pubDate>Wed, 11 Feb 2009 04:05:47 GMT</pubDate><ttl>60</ttl><item><title>转:Message Driven POJO</title><link>http://www.blogjava.net/pitey/archive/2009/02/11/254198.html</link><dc:creator>Pitey</dc:creator><author>Pitey</author><pubDate>Wed, 11 Feb 2009 01:52:00 GMT</pubDate><guid>http://www.blogjava.net/pitey/archive/2009/02/11/254198.html</guid><wfw:comment>http://www.blogjava.net/pitey/comments/254198.html</wfw:comment><comments>http://www.blogjava.net/pitey/archive/2009/02/11/254198.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pitey/comments/commentRss/254198.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pitey/services/trackbacks/254198.html</trackback:ping><description><![CDATA[作者：<a href="http://calvin.blogjava.net/"><font color="#366900">江南白衣</font></a>&#160;<br />
&#160;&#160;<br />
&#160;&#160;&#160;
一直希望那些J字头的协议能有几个提前告老还乡的，好减轻一下我们的负担，特别是这WebService满天飞的时代。但似乎还有很久都轮不到JMS的消失：<br />
<br />
&#160;&#160;&#160;<strong>&#160;1.因为<br />
</strong>&#160;&#160;&#160;&#160;1.它是《Effective
Enterprise Java》的一个实践。&#160;<br />
&#160;&#160;&#160; 可以把不影响用户执行结果又比较耗时的任务（比如发邮件通知管理员）异步的扔给JMS
服务端去做，而尽快的把屏幕返还给用户。<br />
&#160;&#160;&#160;&#160;而且服务端能够多线程排队响应--高并发的请求。<br />
<br />
&#160;&#160;&#160; 2.
可以在Java世界里达到最高的解耦。<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;对比WebService，JMS的客户端与服务端无需直连，甚至无需知晓对方是谁、在哪里、有多少人，只要对流过的信息作响应就行了。对牵一发动全身的企业应用来说很轻省。<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;<strong>2.
但是<br />
</strong>&#160;&#160;&#160;&#160; 1. Message
Bean带着EJB系的荣光，步骤比较繁杂，你需要实现MessageDrivenBean、MessageListener接口，还需要设置EJB的配置信息，然后是deploy....
<p>&#160;&#160;&#160;&#160; 2. Spring 1.x 提供的JMS Template简化了JMS
Client端的编程，但并没有涉及到服务端的改造。<br />
<br />
&#160;&#160;&#160;&#160;<strong> 3.&#160;所以，SpringSide的Message Driven
POJO方案</strong><br />
<br />
&#160;&#160;&#160;&#160;&#160; Spring JMS Template + ActiveMQ + Jencks</p>
<p>1. 它是Lightweight的，基本上只是普通POJO，不用搞太多东西。</p>
<p>2. 它是Spring Base的，可以使用Spring的各种特性如IOC、AOP。</p>
<p>3. 它是Effective的，基于Jencks的JCA Container实现&#160;pool connection，control transactions
and manage security。</p>
<p>4. 但它是withdout EJB
Container的。<br />
<br />
其实它还不是100%&#160;POJO，除非再用上Lingo，但我已不想走得太远。<br />
<br />
<strong>4.黄金版配置<br />
</strong>&#160;&#160;&#160;&#160;&#160;
如果你想找一个ActiveMQ 3.2 Stable版+Spring的100%可行的配置文件，估计只能到<a href="http://www.springside.org.cn/" target="_blank">SpringSide项目</a>里看了。网上的文章，不是已过时，就是不切题。<br />
<br />
&#160;&#160;&#160;&#160;&#160;推荐中英两份最接近的文档：<br />
&#160;&#160;&#160;&#160;
<a href="http://www.jetmaven.net/documents/j_spring_messageBean.php">捷特慈朋(IDEA中国):
Spring和Message Bean的整合</a><br />
&#160;&#160;&#160;&#160; <a href="http://y%3Dmessage_driven_pojos/">Spring loaded:&#160; Message-Driven
POJOs&#160;</a><br />
<br />
&#160;&#160;&#160;&#160;&#160;不过它们都有个outdate的地方--ActiveMQ3.2开始不再自带JCA
Cotainer了，而是将其与Gernimo 合作而成了Jencks，需另外安装。<br />
<br />
<strong>&#160;5.<a href="http://www.springside.org.cn/" target="_blank">SpringSide</a>旅游指南</strong><br />
<br />
&#160;&#160;&#160;&#160;&#160; pom.xml里的JMS部分
--所需的依赖包。<br />
&#160;&#160;&#160;&#160;&#160; applicationContext-jms.xml --黄金版配置文件。<br />
&#160;&#160;&#160;&#160;&#160; activemq.xml&#160;
--AcitveMQ Broker配置文件。<br />
&#160;&#160;&#160;&#160;&#160; OrderPlaceMDP.java --Message Driven
Pojo。<br />
&#160;&#160;&#160;&#160;&#160;&#160;JmsTest.java&#160;--单元测试用例。<br />
&#160;&#160;&#160;&#160;&#160;&#160;OrderManger.java的NodifyOrder()函数
--实际应用的地方。&#160;<br />
<br />
　POJO太简单，唯一麻烦的配置文件已注释，这里也就无话了。</p>
<img src ="http://www.blogjava.net/pitey/aggbug/254198.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pitey/" target="_blank">Pitey</a> 2009-02-11 09:52 <a href="http://www.blogjava.net/pitey/archive/2009/02/11/254198.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring事物拦截器学习笔记</title><link>http://www.blogjava.net/pitey/archive/2009/02/10/254143.html</link><dc:creator>Pitey</dc:creator><author>Pitey</author><pubDate>Tue, 10 Feb 2009 15:07:00 GMT</pubDate><guid>http://www.blogjava.net/pitey/archive/2009/02/10/254143.html</guid><wfw:comment>http://www.blogjava.net/pitey/comments/254143.html</wfw:comment><comments>http://www.blogjava.net/pitey/archive/2009/02/10/254143.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pitey/comments/commentRss/254143.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pitey/services/trackbacks/254143.html</trackback:ping><description><![CDATA[<p><span style="font-size: 10pt"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt">Spring事物拦截器，按照通知方式分为[前置通知（Before advice）,返回后通知（After returning advice）<br />
,抛出后通知（After throwing advice）,后通知（After (finally) advice）,环绕通知（Around Advice）]<br />
配置方式分@AspectJ,XML，网上比较多的是Spring1.1或xml+@AspectJ方式配置，例子使用XML方式配置</span></span></span></span></p>
<p><span style="font-size: 10pt"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt">1.定义切面类接口，切面类实现这个接口。声明（如果被代理的目标对象实现了至少一个接口，则会使用JDK动态代理。所有该目标类型实现的接口都将被代理。若该目标对象没有实现任何接口，则创建一个CGLIB代理）<br />
</span></span></span></span></p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee; "><img id="Codehighlighter1_29_94_Open_Image" onclick="this.style.display='none'; Codehighlighter1_29_94_Open_Text.style.display='none'; Codehighlighter1_29_94_Closed_Image.style.display='inline'; Codehighlighter1_29_94_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_29_94_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_29_94_Closed_Text.style.display='none'; Codehighlighter1_29_94_Open_Image.style.display='inline'; Codehighlighter1_29_94_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&#160;ITestAdvice&#160;</span><span id="Codehighlighter1_29_94_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_29_94_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;</span><span style="color: #0000ff">public</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">void</span><span style="color: #000000">&#160;doPlay();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;</span><span style="color: #0000ff">public</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">void</span><span style="color: #000000">&#160;doStop(Object&#160;reval);<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="" /><br />
<img id="Codehighlighter1_136_295_Open_Image" onclick="this.style.display='none'; Codehighlighter1_136_295_Open_Text.style.display='none'; Codehighlighter1_136_295_Closed_Image.style.display='inline'; Codehighlighter1_136_295_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_136_295_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_136_295_Closed_Text.style.display='none'; Codehighlighter1_136_295_Open_Image.style.display='inline'; Codehighlighter1_136_295_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">&#160;</span><span style="color: #0000ff">class</span><span style="color: #000000">&#160;Tv&#160;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&#160;ITestAdvice</span><span id="Codehighlighter1_136_295_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_136_295_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;<br />
<img id="Codehighlighter1_176_230_Open_Image" onclick="this.style.display='none'; Codehighlighter1_176_230_Open_Text.style.display='none'; Codehighlighter1_176_230_Closed_Image.style.display='inline'; Codehighlighter1_176_230_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_176_230_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_176_230_Closed_Text.style.display='none'; Codehighlighter1_176_230_Open_Image.style.display='inline'; Codehighlighter1_176_230_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />&#160;</span><span style="color: #0000ff">public</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">void</span><span style="color: #000000">&#160;doStop(Object&#160;reval)&#160;</span><span id="Codehighlighter1_176_230_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_230_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;&#160;System.out.println(reval.toString()&#160;</span><span style="color: #000000">+</span><span style="color: #000000">&#160;</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="" />&#160;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;<br />
<img id="Codehighlighter1_256_291_Open_Image" onclick="this.style.display='none'; Codehighlighter1_256_291_Open_Text.style.display='none'; Codehighlighter1_256_291_Closed_Image.style.display='inline'; Codehighlighter1_256_291_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_256_291_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_256_291_Closed_Text.style.display='none'; Codehighlighter1_256_291_Open_Image.style.display='inline'; Codehighlighter1_256_291_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />&#160;</span><span style="color: #0000ff">public</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">void</span><span style="color: #000000">&#160;doPlay()&#160;</span><span id="Codehighlighter1_256_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"><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span id="Codehighlighter1_256_291_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;&#160;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="" />&#160;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;<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><span style="font-size: 10pt"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt">&#160;</span></span></span></span></p>
<p><span style="font-size: 10pt"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt">2.定义前置通知拦截处理类</span></span></span></span></p>
<p>&#160;</p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee; "><img id="Codehighlighter1_37_119_Open_Image" onclick="this.style.display='none'; Codehighlighter1_37_119_Open_Text.style.display='none'; Codehighlighter1_37_119_Closed_Image.style.display='inline'; Codehighlighter1_37_119_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_37_119_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_37_119_Closed_Text.style.display='none'; Codehighlighter1_37_119_Open_Image.style.display='inline'; Codehighlighter1_37_119_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">class</span><span style="color: #000000">&#160;TestMethodBeforeAdvice&#160;&#160;</span><span id="Codehighlighter1_37_119_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_37_119_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;<br />
<img id="Codehighlighter1_76_115_Open_Image" onclick="this.style.display='none'; Codehighlighter1_76_115_Open_Text.style.display='none'; Codehighlighter1_76_115_Closed_Image.style.display='inline'; Codehighlighter1_76_115_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_76_115_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_76_115_Closed_Text.style.display='none'; Codehighlighter1_76_115_Open_Image.style.display='inline'; Codehighlighter1_76_115_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />&#160;</span><span style="color: #0000ff">public</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">void</span><span style="color: #000000">&#160;before(JoinPoint&#160;jpt)&#160;</span><span id="Codehighlighter1_76_115_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_76_115_Open_Text"><span style="color: #000000">{&#160;&#160;//参数JoinPoint为默认参数<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;&#160;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="" />&#160;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;<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 />
<span style="font-size: 10pt"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt">3.定义拦截器配置文件</span></span></span></span></p>
<p><span style="font-size: 10pt"><span style="font-family: 宋体"><span style="font-size: 12pt"></span></span></span></p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee; "><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #000000">&lt;</span><span style="color: #000000">bean&#160;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">tv</span><span style="color: #000000">"</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">com.pitey.demo.Tv</span><span style="color: #000000">"</span><span style="color: #000000">&#160;</span><span style="color: #000000">/></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">bean&#160;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">beforeAdvice</span><span style="color: #000000">"</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">com.pitey.demo.TestMethodBeforeAdvice</span><span style="color: #000000">"</span><span style="color: #000000">&#160;</span><span style="color: #000000">/></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;</span><span style="color: #000000">&lt;</span><span style="color: #000000">aop:aspectj</span><span style="color: #000000">-</span><span style="color: #000000">autoproxy&#160;proxy</span><span style="color: #000000">-</span><span style="color: #000000">target</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">true</span><span style="color: #000000">"</span><span style="color: #000000">/></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;</span><span style="color: #000000">&lt;</span><span style="color: #000000">aop:config</span><span style="color: #000000">></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;&#160;</span><span style="color: #000000">&lt;!--</span><span style="color: #000000">&#160;定义切入点&#160;</span><span style="color: #000000">--></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;&#160;</span><span style="color: #000000">&lt;</span><span style="color: #000000">aop:pointcut&#160;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">methodAdvice</span><span style="color: #000000">"</span><span style="color: #000000">&#160;expression</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">execution(*&#160;com.pitey.demo.*.*(..))</span><span style="color: #000000">"</span><span style="color: #000000">&#160;</span><span style="color: #000000">/></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;&#160;</span><span style="color: #000000">&lt;!--</span><span style="color: #000000">&#160;定义切面&#160;</span><span style="color: #000000">--></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;&#160;</span><span style="color: #000000">&lt;</span><span style="color: #000000">aop:aspect&#160;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">beforeAdviceAspect</span><span style="color: #000000">"</span><span style="color: #000000">&#160;ref</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">beforeAdvice</span><span style="color: #000000">"</span><span style="color: #000000">></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;&#160;&#160;</span><span style="color: #000000">&lt;!--</span><span style="color: #000000">&#160;定义前置通知&#160;</span><span style="color: #000000">--></span><span style="color: #000000">&#160;&#160;&#160;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;&#160;&#160;</span><span style="color: #000000">&lt;</span><span style="color: #000000">aop:before&#160;method</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">before</span><span style="color: #000000">"</span><span style="color: #000000">&#160;pointcut</span><span style="color: #000000">-</span><span style="color: #000000">ref</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">methodAdvice</span><span style="color: #000000">"</span><span style="color: #000000">/></span><span style="color: #000000">&#160;&#160;&#160;&#160;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">aop:config</span><span style="color: #000000">></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 />
4.测试一下前置通知<br />
<span style="font-size: 10pt"><span style="font-family: 宋体"><span style="font-size: 12pt"></span></span></span></p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee; "><img id="Codehighlighter1_39_214_Open_Image" onclick="this.style.display='none'; Codehighlighter1_39_214_Open_Text.style.display='none'; Codehighlighter1_39_214_Closed_Image.style.display='inline'; Codehighlighter1_39_214_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_39_214_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_39_214_Closed_Text.style.display='none'; Codehighlighter1_39_214_Open_Image.style.display='inline'; Codehighlighter1_39_214_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">static</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">void</span><span style="color: #000000">&#160;main(String[]&#160;args)&#160;</span><span id="Codehighlighter1_39_214_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_39_214_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ApplicationContext&#160;context&#160;</span><span style="color: #000000">=</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">new</span><span style="color: #000000">&#160;ClassPathXmlApplicationContext(</span><span style="color: #000000">"</span><span style="color: #000000">config\\advice.xml</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Tv&#160;tv&#160;</span><span style="color: #000000">=</span><span style="color: #000000">&#160;(Tv)context.getBean(</span><span style="color: #000000">"</span><span style="color: #000000">tv</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tv.doPlay();&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />&#160;&#160;&#160;&#160;}</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="" />结果:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;正在打开电视机<img src="http://www.blogjava.net/Images/dot.gif" alt="" />..<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;打开电视机<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 />
5.定义返回后通知拦截处理类</p>
<p><span style="font-size: 10pt"><span style="font-family: 宋体"><span style="font-size: 12pt"></span></span></span></p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee; "><img id="Codehighlighter1_35_200_Open_Image" onclick="this.style.display='none'; Codehighlighter1_35_200_Open_Text.style.display='none'; Codehighlighter1_35_200_Closed_Image.style.display='inline'; Codehighlighter1_35_200_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_35_200_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_35_200_Closed_Text.style.display='none'; Codehighlighter1_35_200_Open_Image.style.display='inline'; Codehighlighter1_35_200_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">class</span><span style="color: #000000">&#160;TestAfterReturnAdvice&#160;</span><span id="Codehighlighter1_35_200_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_35_200_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;<br />
<img id="Codehighlighter1_99_196_Open_Image" onclick="this.style.display='none'; Codehighlighter1_99_196_Open_Text.style.display='none'; Codehighlighter1_99_196_Closed_Image.style.display='inline'; Codehighlighter1_99_196_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_99_196_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_99_196_Closed_Text.style.display='none'; Codehighlighter1_99_196_Open_Image.style.display='inline'; Codehighlighter1_99_196_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />&#160;</span><span style="color: #0000ff">public</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">void</span><span style="color: #000000">&#160;afterReturning(Object&#160;retVal)&#160;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&#160;Throwable&#160;</span><span id="Codehighlighter1_99_196_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_99_196_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;&#160;String&#160;returnVal&#160;</span><span style="color: #000000">=</span><span style="color: #000000">&#160;电视机已经打开</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/InBlock.gif" align="top" alt="" /></span><span style="color: #000000">&#160;&#160;System.out.println(returnVal);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;&#160;retVal</span><span style="color: #000000">=</span><span style="color: #000000">&#160;(Object)returnVal;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&#160;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;<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 />
6.定义拦截器配置文件</p>
<p><span style="font-size: 10pt"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt">&#160;</span></span></span></span></p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee; "><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #000000">&lt;</span><span style="color: #000000">bean&#160;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">afterReturnAdvice</span><span style="color: #000000">"</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">com.pitey.demo.TestAfterReturnAdvice</span><span style="color: #000000">"</span><span style="color: #000000">/></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;</span><span style="color: #000000">&lt;</span><span style="color: #000000">aop:config</span><span style="color: #000000">></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;&#160;</span><span style="color: #000000">&lt;!--</span><span style="color: #000000">&#160;定义切面&#160;</span><span style="color: #000000">--></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;&#160;</span><span style="color: #000000">&lt;</span><span style="color: #000000">aop:aspect&#160;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">afterReturnAdviceAspect</span><span style="color: #000000">"</span><span style="color: #000000">&#160;ref</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">afterReturnAdvice</span><span style="color: #000000">"</span><span style="color: #000000">></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;&#160;&#160;</span><span style="color: #000000">&lt;!--</span><span style="color: #000000">&#160;定义后置返回通知&#160;&#160;</span><span style="color: #000000">--></span><span style="color: #000000">&#160;&#160;&#160;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;&#160;&#160;</span><span style="color: #000000">&lt;</span><span style="color: #000000">aop:after</span><span style="color: #000000">-</span><span style="color: #000000">returning&#160;method</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">afterReturning</span><span style="color: #000000">"</span><span style="color: #000000">&#160;pointcut</span><span style="color: #000000">-</span><span style="color: #000000">ref</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">methodAdvice</span><span style="color: #000000">"</span><span style="color: #000000">&#160;returning</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">retVal</span><span style="color: #000000">"</span><span style="color: #000000">/></span><span style="color: #000000">&#160;</span><span style="color: #008000">//</span><span style="color: #008000">returing&#160;为返回参数</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #000000">&#160;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">aop:config</span><span style="color: #000000">></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 />
7.测试一下返回后通知<br />
<span style="font-size: 10pt"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><br />
</span></span></span></span></p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee; "><img id="Codehighlighter1_39_214_Open_Image" onclick="this.style.display='none'; Codehighlighter1_39_214_Open_Text.style.display='none'; Codehighlighter1_39_214_Closed_Image.style.display='inline'; Codehighlighter1_39_214_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_39_214_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_39_214_Closed_Text.style.display='none'; Codehighlighter1_39_214_Open_Image.style.display='inline'; Codehighlighter1_39_214_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">static</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">void</span><span style="color: #000000">&#160;main(String[]&#160;args)&#160;</span><span id="Codehighlighter1_39_214_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_39_214_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ApplicationContext&#160;context&#160;</span><span style="color: #000000">=</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">new</span><span style="color: #000000">&#160;ClassPathXmlApplicationContext(</span><span style="color: #000000">"</span><span style="color: #000000">config\\advice.xml</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Tv&#160;tv&#160;</span><span style="color: #000000">=</span><span style="color: #000000">&#160;(Tv)context.getBean(</span><span style="color: #000000">"</span><span style="color: #000000">tv</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tv.doPlay();&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />&#160;&#160;&#160;&#160;}</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="" />结果:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;正在打开电视机<img src="http://www.blogjava.net/Images/dot.gif" alt="" />..<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;打开电视机<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 电视机已经打开</span><span style="color: #000000">!</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 />
8.定义环绕通知拦截处理类（环绕通知在一个方法执行之前和之后执行。 它使得通知有机会既在一个方法执行之前又在执行之后运行。并且，它可以决定这个方法在什么时候执行，如何执行，甚至是否执行。 环绕通知经常在在某线程安全的环境下，你需要在一个方法执行之前和之后共享某种状态的时候使用。 请尽量使用最简单的满足你需求的通知。（比如如果前置通知（before advice）也可以适用的情况下不要使用环绕通知））<br />
通知方法的第一个参数的类型必须是 <code class="interfacename">ProceedingJoinPoint</code> 类型。在通知的主体中，调用 <code class="interfacename">ProceedingJoinPoint</code>的<code class="literal">proceed()</code> 方法来执行真正的方法。 <code class="literal">proceed</code> 方法也可能会被调用并且传入一个 <code class="classname">Object[]</code> 对象 - 该数组将作为方法执行时候的参数。</p>
<p><span style="font-size: 10pt"><span style="font-family: 宋体"><span style="font-size: 12pt"></span></span></span></p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee; "><img id="Codehighlighter1_33_245_Open_Image" onclick="this.style.display='none'; Codehighlighter1_33_245_Open_Text.style.display='none'; Codehighlighter1_33_245_Closed_Image.style.display='inline'; Codehighlighter1_33_245_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_33_245_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_33_245_Closed_Text.style.display='none'; Codehighlighter1_33_245_Open_Image.style.display='inline'; Codehighlighter1_33_245_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">class</span><span style="color: #000000">&#160;TestMethodIntercepor</span><span id="Codehighlighter1_33_245_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_33_245_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;<br />
<img id="Codehighlighter1_112_242_Open_Image" onclick="this.style.display='none'; Codehighlighter1_112_242_Open_Text.style.display='none'; Codehighlighter1_112_242_Closed_Image.style.display='inline'; Codehighlighter1_112_242_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_112_242_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_112_242_Closed_Text.style.display='none'; Codehighlighter1_112_242_Open_Image.style.display='inline'; Codehighlighter1_112_242_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" alt="" />&#160;</span><span style="color: #0000ff">public</span><span style="color: #000000">&#160;Object&#160;doBasicProfiling(ProceedingJoinPoint&#160;&#160;pjp)&#160;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&#160;Throwable&#160;</span><span id="Codehighlighter1_112_242_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_112_242_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;&#160;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">begining<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><img src="http://www.blogjava.net/Images/dot.gif" alt="" /></span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;&#160;Object&#160;obj&#160;</span><span style="color: #000000">=</span><span style="color: #000000">&#160;pjp.proceed();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;&#160;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;&#160;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">ending<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><img src="http://www.blogjava.net/Images/dot.gif" alt="" />..</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;&#160;</span><span style="color: #0000ff">return</span><span style="color: #000000">&#160;obj;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" alt="" />&#160;}</span></span><span style="color: #000000">&#160;<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 />
<br />
9.定义拦截器配置文件</p>
<p><span style="font-size: 10pt"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt">&#160;</span></span></span></span></p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee; "><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #000000">&lt;</span><span style="color: #000000">bean&#160;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">aroundAdvice</span><span style="color: #000000">"</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">class</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">com.pitey.demo.TestMethodIntercepor</span><span style="color: #000000">"</span><span style="color: #000000">/></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;</span><span style="color: #000000">&lt;</span><span style="color: #000000">aop:config</span><span style="color: #000000">></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;&#160;</span><span style="color: #000000">&lt;!--</span><span style="color: #000000">&#160;定义切面&#160;</span><span style="color: #000000">--></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;&#160;</span><span style="color: #000000">&lt;</span><span style="color: #000000">aop:aspect&#160;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">aroundAspect</span><span style="color: #000000">"</span><span style="color: #000000">&#160;ref</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">aroundAdvice</span><span style="color: #000000">"</span><span style="color: #000000">></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;</span><span style="color: #000000">&lt;</span><span style="color: #000000">aop:around&#160;method</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">doBasicProfiling</span><span style="color: #000000">"</span><span style="color: #000000">&#160;pointcut</span><span style="color: #000000">-</span><span style="color: #000000">ref</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">methodBeforeAdvice</span><span style="color: #000000">"</span><span style="color: #000000">/></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;&#160;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">aop:aspect</span><span style="color: #000000">></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">aop:config</span><span style="color: #000000">></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 />
<br />
10.测试一下环绕通知<br />
</p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left-color: #cccccc; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee; "><img id="Codehighlighter1_39_214_Open_Image" onclick="this.style.display='none'; Codehighlighter1_39_214_Open_Text.style.display='none'; Codehighlighter1_39_214_Closed_Image.style.display='inline'; Codehighlighter1_39_214_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" alt="" /><img id="Codehighlighter1_39_214_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_39_214_Closed_Text.style.display='none'; Codehighlighter1_39_214_Open_Image.style.display='inline'; Codehighlighter1_39_214_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">static</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">void</span><span style="color: #000000">&#160;main(String[]&#160;args)&#160;</span><span id="Codehighlighter1_39_214_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_39_214_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ApplicationContext&#160;context&#160;</span><span style="color: #000000">=</span><span style="color: #000000">&#160;</span><span style="color: #0000ff">new</span><span style="color: #000000">&#160;ClassPathXmlApplicationContext(</span><span style="color: #000000">"</span><span style="color: #000000">config\\advice.xml</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Tv&#160;tv&#160;</span><span style="color: #000000">=</span><span style="color: #000000">&#160;(Tv)context.getBean(</span><span style="color: #000000">"</span><span style="color: #000000">tv</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" alt="" />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tv.doPlay();&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" alt="" />&#160;&#160;&#160;&#160;}</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="" />结果:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;begining<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;打开电视机<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" alt="" />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ending<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><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></div>
<img src ="http://www.blogjava.net/pitey/aggbug/254143.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pitey/" target="_blank">Pitey</a> 2009-02-10 23:07 <a href="http://www.blogjava.net/pitey/archive/2009/02/10/254143.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring 获取Connection</title><link>http://www.blogjava.net/pitey/archive/2008/03/05/183932.html</link><dc:creator>Pitey</dc:creator><author>Pitey</author><pubDate>Wed, 05 Mar 2008 04:45:00 GMT</pubDate><guid>http://www.blogjava.net/pitey/archive/2008/03/05/183932.html</guid><wfw:comment>http://www.blogjava.net/pitey/comments/183932.html</wfw:comment><comments>http://www.blogjava.net/pitey/archive/2008/03/05/183932.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pitey/comments/commentRss/183932.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pitey/services/trackbacks/183932.html</trackback:ping><description><![CDATA[<div style="border-left-color: #cccccc; padding-top: 4px; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; background-color: #eeeeee; font-size: 13px; width: 98%; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">applicationContext.xml里面设置<br />
<br />
&lt;bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="default" autowire="default" dependency-check="default"><br />
&#160;&#160;&#160; &#160;&#160;&#160; &lt;property name="jndiName"><br />
&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &lt;value>JDBC/TEST&lt;/value>&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <br />
&#160;&#160;&#160; &#160;&#160;&#160; &lt;/property><br />
&lt;/bean> 或者<br />
<br />
&lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><br />
&#160;&#160;&#160; &#160;&#160;&#160; &lt;property name="driverClassName" value="oracle.jdbc.driver.OracleDriver">&lt;/property><br />
&#160;&#160;&#160; &#160;&#160;&#160; &lt;property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:ora">&lt;/property><br />
&#160;&#160;&#160; &#160;&#160;&#160; &lt;property name="username" value="test">&lt;/property><br />
&#160;&#160;&#160; &#160;&#160;&#160; &lt;property name="password" value="123456">&lt;/property><br />
&#160;&#160;&#160; &lt;/bean><br />
<br />
</span><span style="color: #000000;"><br />
通过</span><span style="color: #000000;">DataSourceUtils.getConnection(</span><span style="color: #000000;">DataSource</span><span style="color: #000000;">）;就能获取到设置的DataSource 然后获得connection<br />
<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&#160;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&#160;Connection&#160;getConnection()<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&#160;SQLException<br />
&#160;&#160;&#160;&#160;{&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br />
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&#160;DataSourceUtils.getConnection((DataSource)ServiceLocator.getBean(</span><span style="color: #000000;">"</span><span style="color: #000000;">dataSource</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br />
}<br />
</span><span style="color: #000000;"><span  style="color: #0000ff; "><br />
</span>
</span></div>
<img src ="http://www.blogjava.net/pitey/aggbug/183932.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pitey/" target="_blank">Pitey</a> 2008-03-05 12:45 <a href="http://www.blogjava.net/pitey/archive/2008/03/05/183932.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>