﻿<?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-leisure-随笔分类-java</title><link>http://www.blogjava.net/leisure/category/49623.html</link><description>JAVA - exceed,helloworld</description><language>zh-cn</language><lastBuildDate>Fri, 11 Jan 2013 20:38:50 GMT</lastBuildDate><pubDate>Fri, 11 Jan 2013 20:38:50 GMT</pubDate><ttl>60</ttl><item><title>spring2 JNDI</title><link>http://www.blogjava.net/leisure/archive/2013/01/11/394091.html</link><dc:creator>leisure</dc:creator><author>leisure</author><pubDate>Fri, 11 Jan 2013 02:33:00 GMT</pubDate><guid>http://www.blogjava.net/leisure/archive/2013/01/11/394091.html</guid><wfw:comment>http://www.blogjava.net/leisure/comments/394091.html</wfw:comment><comments>http://www.blogjava.net/leisure/archive/2013/01/11/394091.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leisure/comments/commentRss/394091.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leisure/services/trackbacks/394091.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all">&nbsp; &nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">=&nbsp;"myjndi"&nbsp;</span><span style="color: #FF0000; ">class</span><span style="color: #0000FF; ">=&nbsp;"org.springframework.jndi.JndiObjectFactoryBean"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name&nbsp;</span><span style="color: #0000FF; ">="jndiName"&nbsp;</span><span style="color: #FF0000; ">value</span><span style="color: #0000FF; ">=&nbsp;"java:comp/env/jdbc/myjndi"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">bean&nbsp;</span><span style="color: #0000FF; ">&gt;</span></div><img src ="http://www.blogjava.net/leisure/aggbug/394091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leisure/" target="_blank">leisure</a> 2013-01-11 10:33 <a href="http://www.blogjava.net/leisure/archive/2013/01/11/394091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring method interceptor</title><link>http://www.blogjava.net/leisure/archive/2012/07/11/382760.html</link><dc:creator>leisure</dc:creator><author>leisure</author><pubDate>Wed, 11 Jul 2012 01:14:00 GMT</pubDate><guid>http://www.blogjava.net/leisure/archive/2012/07/11/382760.html</guid><wfw:comment>http://www.blogjava.net/leisure/comments/382760.html</wfw:comment><comments>http://www.blogjava.net/leisure/archive/2012/07/11/382760.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leisure/comments/commentRss/382760.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leisure/services/trackbacks/382760.html</trackback:ping><description><![CDATA[<div><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:center; vertical-align:; "><span style="font-size: 16pt; font-family: Calibri; ">spring&nbsp;method&nbsp;interceptor</span></p><p style="margin-left:210.0000pt; text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; vertical-align:; "><span style="font-size: 12pt; font-family: Calibri; ">-author:&nbsp;leisure.xu</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; vertical-align:; "><span style="font-size: 11pt; font-family: Calibri; ">首先dao里面有find和save方法，本实例以拦截find方法为主，并改变find的返回值。</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; vertical-align:; "></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="color: #7f0055; font-weight: bold; font-size: 10pt; font-family: Consolas; ">package</span>&nbsp;<span style="font-size: 10pt; font-family: Consolas; ">com.leisure;</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#7f0055; font-weight:bold; font-size:10.0000pt; font-family:'Consolas'; ">public</span>&nbsp;<span style="mso-spacerun:'yes'; color:#7f0055; font-weight:bold; font-size:10.0000pt; font-family:'Consolas'; ">class</span>&nbsp;<span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">Dao&nbsp;{</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#7f0055; font-weight:bold; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public</span>&nbsp;<span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">String&nbsp;find()&nbsp;{</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.</span>&nbsp;<span style="mso-spacerun:'yes'; color:#0000c0; font-style:italic; font-size:10.0000pt; font-family:'Consolas'; ">out</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">.println(</span>&nbsp;<span style="mso-spacerun:'yes'; color:#2a00ff; font-size:10.0000pt; font-family:'Consolas'; ">"dao:&nbsp;find()"</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">);</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#7f0055; font-weight:bold; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return</span>&nbsp;<span style="mso-spacerun:'yes'; color:#2a00ff; font-size:10.0000pt; font-family:'Consolas'; ">"student"</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">;</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#7f0055; font-weight:bold; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public</span>&nbsp;<span style="mso-spacerun:'yes'; color:#7f0055; font-weight:bold; font-size:10.0000pt; font-family:'Consolas'; ">void</span>&nbsp;<span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">save()&nbsp;{</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.</span>&nbsp;<span style="mso-spacerun:'yes'; color:#0000c0; font-style:italic; font-size:10.0000pt; font-family:'Consolas'; ">out</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">.println(</span>&nbsp;<span style="mso-spacerun:'yes'; color:#2a00ff; font-size:10.0000pt; font-family:'Consolas'; ">"dao:&nbsp;save()"</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">);</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">}</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="font-size: 10pt; font-family: Calibri; ">一、新增一个DaoInterceptor,如下</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="color: #7f0055; font-weight: bold; font-size: 10pt; font-family: Consolas; ">package</span>&nbsp;<span style="font-size: 10pt; font-family: Consolas; ">com.leisure;</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#7f0055; font-weight:bold; font-size:10.0000pt; font-family:'Consolas'; ">import</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;org.aopalliance.intercept.MethodInterceptor;</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#7f0055; font-weight:bold; font-size:10.0000pt; font-family:'Consolas'; ">import</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;org.aopalliance.intercept.MethodInvocation;</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#3f5fbf; font-size:10.0000pt; font-family:'Consolas'; ">/**</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#3f5fbf; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;*&nbsp;class&nbsp;description&nbsp;goes&nbsp;here</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#3f5fbf; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;*&nbsp;</span><span style="mso-spacerun:'yes'; color:#7f9fbf; font-weight:bold; font-size:10.0000pt; font-family:'Consolas'; ">@author</span><span style="mso-spacerun:'yes'; color:#3f5fbf; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;leisure.xu</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#3f5fbf; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;*&nbsp;</span><span style="mso-spacerun:'yes'; color:#7f9fbf; font-weight:bold; font-size:10.0000pt; font-family:'Consolas'; ">@version</span><span style="mso-spacerun:'yes'; color:#3f5fbf; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;1.0.0,&nbsp;2012</span>&nbsp;<span style="mso-spacerun:'yes'; color:#7f7f9f; font-size:10.0000pt; font-family:'Consolas'; ">-</span><span style="mso-spacerun:'yes'; color:#3f5fbf; font-size:10.0000pt; font-family:'Consolas'; ">6</span>&nbsp;<span style="mso-spacerun:'yes'; color:#7f7f9f; font-size:10.0000pt; font-family:'Consolas'; ">-</span><span style="mso-spacerun:'yes'; color:#3f5fbf; font-size:10.0000pt; font-family:'Consolas'; ">29</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#3f5fbf; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;*/</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#7f0055; font-weight:bold; font-size:10.0000pt; font-family:'Consolas'; ">public</span>&nbsp;<span style="mso-spacerun:'yes'; color:#7f0055; font-weight:bold; font-size:10.0000pt; font-family:'Consolas'; ">class</span>&nbsp;<span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">DaoInterceptor&nbsp;</span><span style="mso-spacerun:'yes'; color:#7f0055; font-weight:bold; font-size:10.0000pt; font-family:'Consolas'; ">implements</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;MethodInterceptor&nbsp;{</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#646464; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#7f0055; font-weight:bold; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;Object&nbsp;invoke(MethodInvocation&nbsp;invocation)&nbsp;</span><span style="mso-spacerun:'yes'; color:#7f0055; font-weight:bold; font-size:10.0000pt; font-family:'Consolas'; ">throws</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;Throwable&nbsp;{</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;methodName&nbsp;=&nbsp;invocation.getMethod().getName();</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#7f0055; font-weight:bold; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">(</span>&nbsp;<span style="mso-spacerun:'yes'; color:#2a00ff; font-size:10.0000pt; font-family:'Consolas'; ">"find"</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">.equals(methodName))&nbsp;{</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.</span>&nbsp;<span style="mso-spacerun:'yes'; color:#0000c0; font-style:italic; font-size:10.0000pt; font-family:'Consolas'; ">out</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">.println(</span>&nbsp;<span style="mso-spacerun:'yes'; color:#2a00ff; font-size:10.0000pt; font-family:'Consolas'; ">"invocation&nbsp;modify&nbsp;the&nbsp;return&nbsp;result&nbsp;to&nbsp;'teacher'"</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">);</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#7f0055; font-weight:bold; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return</span>&nbsp;<span style="mso-spacerun:'yes'; color:#2a00ff; font-size:10.0000pt; font-family:'Consolas'; ">"teacher"</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">;</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#7f0055; font-weight:bold; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;invocation.proceed();</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">}</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DaoInterceptor实现了MethodInterceptor的invoke方法，在这里，</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Times New Roman'; ">MethodInvocation</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">参数可以获取到getArguments等数据，至于能做什么，你懂的。</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">二、Dao跟DaoInterceptor还是没扯上关系，这时需要修改applicationContext.xml</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;原来：</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">&lt;</span><span style="mso-spacerun:'yes'; color:#3f7f7f; font-size:10.0000pt; font-family:'Consolas'; ">bean</span>&nbsp;<span style="mso-spacerun:'yes'; color:#7f007f; font-size:10.0000pt; font-family:'Consolas'; ">id</span>&nbsp;<span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">=</span>&nbsp;<span style="mso-spacerun:'yes'; color:#2a00ff; font-style:italic; font-size:10.0000pt; font-family:'Consolas'; ">"dao"</span>&nbsp;<span style="mso-spacerun:'yes'; color:#7f007f; font-size:10.0000pt; font-family:'Consolas'; ">class</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">=</span>&nbsp;<span style="mso-spacerun:'yes'; color:#2a00ff; font-style:italic; font-size:10.0000pt; font-family:'Consolas'; ">"com.leisure.Dao"</span><span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">/&gt;</span></p><p style="text-indent:21.0000pt; margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Calibri'; ">修改为：</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:9.0000pt; font-family:'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun:'yes'; color:#3f5fbf; font-size:10.0000pt; font-family:'Consolas'; ">&lt;!--</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#3f5fbf; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean&nbsp;id="</span>&nbsp;<span style="mso-spacerun:'yes'; color:#3f5fbf; text-decoration:underline ;font-size:10.0000pt; font-family:'Consolas'; ">dao</span><span style="mso-spacerun:'yes'; color:#3f5fbf; font-size:10.0000pt; font-family:'Consolas'; ">"&nbsp;class="com.leiusre.Dao"/&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#3f5fbf; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">&lt;</span><span style="mso-spacerun:'yes'; color:#3f7f7f; font-size:10.0000pt; font-family:'Consolas'; ">bean</span>&nbsp;<span style="mso-spacerun:'yes'; color:#7f007f; font-size:10.0000pt; font-family:'Consolas'; ">id</span>&nbsp;<span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">=</span><span style="mso-spacerun:'yes'; color:#2a00ff; font-style:italic; font-size:10.0000pt; font-family:'Consolas'; ">"daoInterceptor"</span>&nbsp;<span style="mso-spacerun:'yes'; color:#7f007f; font-size:10.0000pt; font-family:'Consolas'; ">class</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">=</span><span style="mso-spacerun:'yes'; color:#2a00ff; font-style:italic; font-size:10.0000pt; font-family:'Consolas'; ">"com.leisure.DaoInterceptor"</span><span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">/&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">&lt;</span><span style="mso-spacerun:'yes'; color:#3f7f7f; font-size:10.0000pt; font-family:'Consolas'; ">bean</span>&nbsp;<span style="mso-spacerun:'yes'; color:#7f007f; font-size:10.0000pt; font-family:'Consolas'; ">id</span>&nbsp;<span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">=</span><span style="mso-spacerun:'yes'; color:#2a00ff; font-style:italic; font-size:10.0000pt; font-family:'Consolas'; ">"dao"</span>&nbsp;<span style="mso-spacerun:'yes'; color:#7f007f; font-size:10.0000pt; font-family:'Consolas'; ">class</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">=</span>&nbsp;<span style="mso-spacerun:'yes'; color:#2a00ff; font-style:italic; font-size:10.0000pt; font-family:'Consolas'; ">"org.springframework.aop.framework.ProxyFactoryBean"</span>&nbsp;<span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="mso-spacerun:'yes'; color:#3f7f7f; font-size:10.0000pt; font-family:'Consolas'; ">property</span>&nbsp;<span style="mso-spacerun:'yes'; color:#7f007f; font-size:10.0000pt; font-family:'Consolas'; ">name</span>&nbsp;<span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">=</span><span style="mso-spacerun:'yes'; color:#2a00ff; font-style:italic; font-size:10.0000pt; font-family:'Consolas'; ">"target"</span><span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="mso-spacerun:'yes'; color:#3f7f7f; font-size:10.0000pt; font-family:'Consolas'; ">bean</span>&nbsp;<span style="mso-spacerun:'yes'; color:#7f007f; font-size:10.0000pt; font-family:'Consolas'; ">class</span>&nbsp;<span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">=</span><span style="mso-spacerun:'yes'; color:#2a00ff; font-style:italic; font-size:10.0000pt; font-family:'Consolas'; ">"com.leisure.Dao"</span>&nbsp;<span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">/&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</span><span style="mso-spacerun:'yes'; color:#3f7f7f; font-size:10.0000pt; font-family:'Consolas'; ">property</span>&nbsp;<span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="mso-spacerun:'yes'; color:#3f7f7f; font-size:10.0000pt; font-family:'Consolas'; ">property</span>&nbsp;<span style="mso-spacerun:'yes'; color:#7f007f; font-size:10.0000pt; font-family:'Consolas'; ">name</span>&nbsp;<span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">=</span><span style="mso-spacerun:'yes'; color:#2a00ff; font-style:italic; font-size:10.0000pt; font-family:'Consolas'; ">"interceptorNames"</span><span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="mso-spacerun:'yes'; color:#3f7f7f; font-size:10.0000pt; font-family:'Consolas'; ">list</span>&nbsp;<span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="mso-spacerun:'yes'; color:#3f7f7f; font-size:10.0000pt; font-family:'Consolas'; ">value</span>&nbsp;<span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">&gt;</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">daoInterceptor</span>&nbsp;<span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">&lt;/</span><span style="mso-spacerun:'yes'; color:#3f7f7f; font-size:10.0000pt; font-family:'Consolas'; ">value</span>&nbsp;<span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</span><span style="mso-spacerun:'yes'; color:#3f7f7f; font-size:10.0000pt; font-family:'Consolas'; ">list</span>&nbsp;<span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</span><span style="mso-spacerun:'yes'; color:#3f7f7f; font-size:10.0000pt; font-family:'Consolas'; ">property</span>&nbsp;<span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="font-size: 10pt; font-family: Consolas; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">&lt;/</span><span style="mso-spacerun:'yes'; color:#3f7f7f; font-size:10.0000pt; font-family:'Consolas'; ">bean</span>&nbsp;<span style="mso-spacerun:'yes'; color:#008080; font-size:10.0000pt; font-family:'Consolas'; ">&gt;</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Calibri'; ">三、运行看效果！</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ApplicationContext&nbsp;context&nbsp;=</span>&nbsp;<span style="mso-spacerun:'yes'; color:#7f0055; font-weight:bold; font-size:10.0000pt; font-family:'Consolas'; ">new</span>&nbsp;<span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">ClassPathXmlApplicationContext(</span><span style="mso-spacerun:'yes'; color:#2a00ff; font-size:10.0000pt; font-family:'Consolas'; ">"applicationContext.xml"</span>&nbsp;<span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">);</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dao&nbsp;dao&nbsp;=&nbsp;context.getBean(Dao.</span>&nbsp;<span style="mso-spacerun:'yes'; color:#7f0055; font-weight:bold; font-size:10.0000pt; font-family:'Consolas'; ">class</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">);</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.</span>&nbsp;<span style="mso-spacerun:'yes'; color:#0000c0; font-style:italic; font-size:10.0000pt; font-family:'Consolas'; ">out</span><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">.println(dao.find());</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dao.save();</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; vertical-align:; "></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Calibri'; ">结果：</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">invocation&nbsp;modify&nbsp;the&nbsp;return&nbsp;result&nbsp;to&nbsp;'teacher'</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">teacher</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; text-align:left; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Consolas'; ">dao:&nbsp;save()</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; vertical-align:; "></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; vertical-align:; "><span style="mso-spacerun:'yes'; font-size:10.0000pt; font-family:'Calibri'; ">从结果可以看出invocation拦截了find方法，并且修改了其返回结果，而对象的find方法并没有执行到。</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; vertical-align:; "></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; vertical-align:; "></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; vertical-align:; "><span style="mso-spacerun:'yes'; font-style:italic; font-size:10.0000pt; font-family:'Calibri'; ">该实例引用到的jar包：</span></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; vertical-align:; "><img src="http://www.blogjava.net/images/blogjava_net/leisure/spring_method_interceptor.jpg" border="0" alt="" width="369" height="210" /><br /><br /><br /></p><p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; vertical-align:; "></p></div><img src ="http://www.blogjava.net/leisure/aggbug/382760.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leisure/" target="_blank">leisure</a> 2012-07-11 09:14 <a href="http://www.blogjava.net/leisure/archive/2012/07/11/382760.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse安装svn客户端</title><link>http://www.blogjava.net/leisure/archive/2012/01/25/368879.html</link><dc:creator>leisure</dc:creator><author>leisure</author><pubDate>Wed, 25 Jan 2012 02:59:00 GMT</pubDate><guid>http://www.blogjava.net/leisure/archive/2012/01/25/368879.html</guid><wfw:comment>http://www.blogjava.net/leisure/comments/368879.html</wfw:comment><comments>http://www.blogjava.net/leisure/archive/2012/01/25/368879.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leisure/comments/commentRss/368879.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leisure/services/trackbacks/368879.html</trackback:ping><description><![CDATA[下载相应的插件版本<br /><div><a href="http://www.eclipse.org/subversive/downloads.php">http://www.eclipse.org/subversive/downloads.php</a></div>把解压的内容放置eclipse\dropins\svn\目录下（svn目录不存在则创建）<br />完成后，重启eclipse，重启完后，提示安装svn connector，选择一个安装即可，安装完后，再一次重启。<br />window - show view - other - svn 下即可以看到svn控制视图<img src ="http://www.blogjava.net/leisure/aggbug/368879.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leisure/" target="_blank">leisure</a> 2012-01-25 10:59 <a href="http://www.blogjava.net/leisure/archive/2012/01/25/368879.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hello,spring3</title><link>http://www.blogjava.net/leisure/archive/2011/12/29/367494.html</link><dc:creator>leisure</dc:creator><author>leisure</author><pubDate>Thu, 29 Dec 2011 08:02:00 GMT</pubDate><guid>http://www.blogjava.net/leisure/archive/2011/12/29/367494.html</guid><wfw:comment>http://www.blogjava.net/leisure/comments/367494.html</wfw:comment><comments>http://www.blogjava.net/leisure/archive/2011/12/29/367494.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leisure/comments/commentRss/367494.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leisure/services/trackbacks/367494.html</trackback:ping><description><![CDATA[spring很早就更新了3.0版本，可是由于项目要求稳定，却一直没有使用到，最近有个新项目，打算采用spring3了。<br /><br />项目整个结构如下：<br /><img src="http://www.blogjava.net/images/blogjava_net/leisure/spring_.jpg" border="0" alt="" width="370" height="326" /><br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<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 /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">beans&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/beans"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="color: #0000FF; ">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:p</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/p"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000FF; ">="http://www.springframework.org/schema/beans<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #0000FF; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">bean&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="dao"</span><span style="color: #FF0000; ">&nbsp;class</span><span style="color: #0000FF; ">="Dao"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">beans</span><span style="color: #0000FF; ">&gt;</span></div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;Dao&nbsp;{<br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&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;find()&nbsp;{<br /></span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">dao:&nbsp;find()</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">6</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">7</span>&nbsp;<span style="color: #000000; "></span></div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.context.ApplicationContext;<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.springframework.context.support.ClassPathXmlApplicationContext;<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;Client&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&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;{<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ApplicationContext&nbsp;context&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;ClassPathXmlApplicationContext(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">applicationContext.xml</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Dao&nbsp;dao&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;context.getBean(Dao.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dao.find();<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; "></span></div><img src ="http://www.blogjava.net/leisure/aggbug/367494.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leisure/" target="_blank">leisure</a> 2011-12-29 16:02 <a href="http://www.blogjava.net/leisure/archive/2011/12/29/367494.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>浅淡Java代理模式之秘书MM</title><link>http://www.blogjava.net/leisure/archive/2011/12/09/365943.html</link><dc:creator>leisure</dc:creator><author>leisure</author><pubDate>Fri, 09 Dec 2011 01:54:00 GMT</pubDate><guid>http://www.blogjava.net/leisure/archive/2011/12/09/365943.html</guid><wfw:comment>http://www.blogjava.net/leisure/comments/365943.html</wfw:comment><comments>http://www.blogjava.net/leisure/archive/2011/12/09/365943.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leisure/comments/commentRss/365943.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leisure/services/trackbacks/365943.html</trackback:ping><description><![CDATA[<div><div><div><div>代理对象一般定义了一个与目标对象相似或相近的行为。代理对象负责对真实模块调用，这使得调用者与被调用者之间建立了一个隔离带。</div><div>场景示例说明：老总说话都是很精简，每次发布一个消息时，总是先将简要内容交给秘书MM，秘书MM经过一番美化后，把消息公布出来。</div><div><br />设老总=Boss，秘书MM=MMProxy</div><div></div><div><br />于是简单的代理就有</div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;Boss&nbsp;{<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">&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;anounce(String&nbsp;content)&nbsp;{<br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(content);<br /></span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #000000; ">}</span></div></div><div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;MMProxy&nbsp;{<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">&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;anounce(String&nbsp;content)&nbsp;{<br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">boss:&nbsp;大家请注意了！</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Boss().anounce(content);<br /></span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">6</span>&nbsp;<span style="color: #000000; ">}</span></div></div><div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;MMProxy().anounce(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">我请大家吃饭。</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);</span></div><br />结果出来的是：</div><div><span style="color: red; ">boss: 大家请注意了！我请大家吃饭。</span></div><div><br />通过上面发现，这种代理比较呆板，比如说，Boss口渴了，又得重新写一个代理方法，这个时候，可以使用动态代理来进行：</div><div><br />添加一个接口IBoss</div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">interface</span><span style="color: #000000; ">&nbsp;IBoss&nbsp;{<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">&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;anounce(String&nbsp;content);<br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&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;drink();<br /></span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #000000; ">}</span></div><br />修改Boss</div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;Boss&nbsp;</span><span style="color: #0000FF; ">implements</span><span style="color: #000000; ">&nbsp;IBoss&nbsp;{<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; ">&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;anounce(String&nbsp;content)&nbsp;{<br /></span><span style="color: #008080; ">3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(content);<br /></span><span style="color: #008080; ">4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">5</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">6</span>&nbsp;<span style="color: #000000; ">&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;drink()&nbsp;{<br /></span><span style="color: #008080; ">7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">boss:&nbsp;拿起杯子，喝水</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">9</span>&nbsp;<span style="color: #000000; ">}</span></div></div><div><br />这时秘书MM变为</div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.lang.reflect.InvocationHandler;<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.lang.reflect.Method;<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;MMProxy&nbsp;</span><span style="color: #0000FF; ">implements</span><span style="color: #000000; ">&nbsp;InvocationHandler&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;Object&nbsp;obj;<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;MMProxy(Object&nbsp;obj)&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.obj&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;obj;<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&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;Object&nbsp;newInstance(Object&nbsp;obj)&nbsp;{<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;java.lang.reflect.Proxy.newProxyInstance(<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.getClass().getClassLoader(),<br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.getClass().getInterfaces(),<br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;MMProxy(obj));<br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;Object&nbsp;invoke(Object&nbsp;proxy,&nbsp;Method&nbsp;method,&nbsp;Object[]&nbsp;args)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;Throwable&nbsp;{<br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">drink</span><span style="color: #000000; ">"</span><span style="color: #000000; ">.equals(method.getName()))&nbsp;{<br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">秘书MM:&nbsp;看到boss想喝水了，于是&nbsp;把水倒进boss的杯子里。</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">anounce</span><span style="color: #000000; ">"</span><span style="color: #000000; ">.equals(method.getName()))&nbsp;{<br /></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">boss:&nbsp;大家请注意！</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method.invoke(obj,&nbsp;args);<br /></span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #000000; ">&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; ">null</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #000000; ">}</span></div></div><div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">&nbsp; &nbsp; &nbsp; &nbsp; IBoss&nbsp;boss&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(IBoss)&nbsp;MMProxy.newInstance(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Boss());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boss.anounce(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">我请大家吃饭。</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boss.drink();</span></div></div><div><br /><span style="color: red; ">boss: 大家请注意！我请大家吃饭。</span></div><div><span style="color: red; ">秘书MM: 看到boss想喝水了，于是 把水倒进boss的杯子里。</span></div><div><span style="color: red; ">boss: 拿起杯子，喝水<br /><br /></span></div><div>现在发现了吧，秘书MM真是服务周到呀。</div></div></div></div><img src ="http://www.blogjava.net/leisure/aggbug/365943.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leisure/" target="_blank">leisure</a> 2011-12-09 09:54 <a href="http://www.blogjava.net/leisure/archive/2011/12/09/365943.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>反射判断成员变量是否静态，并获得其静态成员的值</title><link>http://www.blogjava.net/leisure/archive/2011/11/23/364648.html</link><dc:creator>leisure</dc:creator><author>leisure</author><pubDate>Wed, 23 Nov 2011 09:06:00 GMT</pubDate><guid>http://www.blogjava.net/leisure/archive/2011/11/23/364648.html</guid><wfw:comment>http://www.blogjava.net/leisure/comments/364648.html</wfw:comment><comments>http://www.blogjava.net/leisure/archive/2011/11/23/364648.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leisure/comments/commentRss/364648.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leisure/services/trackbacks/364648.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Field[]&nbsp;fields&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;cls.getDeclaredFields();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Field&nbsp;field&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;fields[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">boolean</span><span style="color: #000000; ">&nbsp;isStatic&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Modifier.isStatic(field.getModifiers());<br />&nbsp; &nbsp; &nbsp; &nbsp; if(isStatic) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println(</span><span style="color: red; ">field.get(null).toString()</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div><img src ="http://www.blogjava.net/leisure/aggbug/364648.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leisure/" target="_blank">leisure</a> 2011-11-23 17:06 <a href="http://www.blogjava.net/leisure/archive/2011/11/23/364648.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SimpleDateFormat多线程并发下的不安全隐患</title><link>http://www.blogjava.net/leisure/archive/2011/10/15/361165.html</link><dc:creator>leisure</dc:creator><author>leisure</author><pubDate>Fri, 14 Oct 2011 16:22:00 GMT</pubDate><guid>http://www.blogjava.net/leisure/archive/2011/10/15/361165.html</guid><wfw:comment>http://www.blogjava.net/leisure/comments/361165.html</wfw:comment><comments>http://www.blogjava.net/leisure/archive/2011/10/15/361165.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leisure/comments/commentRss/361165.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leisure/services/trackbacks/361165.html</trackback:ping><description><![CDATA[<div>
<div>
<div>
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="color: #000000; font-size: 10.5pt; font-family: 宋体; ">最近偶然发现一些数据的日期有错乱，而且时间出错格式无规律，有些去了</span><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'宋体'; ">1970年了，有些月份错了，有些号数变了，而日志上看并没有异常信息！</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'宋体'; ">根据用户反应，常出现在某个批量更新操作中，于是乎，也按照用户描述的，线下操作了数遍，也没有出现这种情况。</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'宋体'; ">有趣的是，就算在线上操作，也并不是一定会出现这种问题，只是偶然！</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'宋体'; ">我开始怀疑底层代码问题了，因为那个操作，并没有修改到日期相关的字段，为了证实这点，经过我一番的排查，<br />问题终于定位在DateUtil.parse等方法上，parse方法调用了一个静态的simpleDateFormat.parse方法，为什么？！为什么这个方法不稳定的？<br />仔细阅读了java.util.SimpleDateFormat的api，发现此信息：</span></p>
<p style="margin-bottom:13.9500pt; margin-top:13.9500pt; text-autospace:ideograph-other; "><span style="mso-spacerun:'yes'; font-weight:bold; font-size:10.5000pt; font-family:'Times New Roman'; ">Synchronization</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Times New Roman'; ">Date&nbsp;formats&nbsp;are&nbsp;not&nbsp;synchronized.&nbsp;It&nbsp;is&nbsp;recommended&nbsp;to&nbsp;create&nbsp;separate&nbsp;format&nbsp;instances&nbsp;for&nbsp;each&nbsp;thread.<br />If&nbsp;multiple&nbsp;threads&nbsp;access&nbsp;a&nbsp;format&nbsp;concurrently,&nbsp;it&nbsp;must&nbsp;be&nbsp;synchronized&nbsp;externally.</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; text-autospace:ideograph-other; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><br />
很明显simpledateformat并不是线程同步的，以致并发的时候不安全！为了证实这点于是乎写了一个简单的测试程序。<br />
</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; "><font class="Apple-style-span" face="'Courier New'"><strong>
</strong></font></p>
<div style="background-color: #eeeeee; font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 850px; word-break: break-all; "><span class="Apple-style-span" style="font-family: 'Courier New'; "><strong><span style="color: #0000ff; ">package</span><span style="color: #000000; ">&nbsp;com.leisure;</span><span style="color: #000000; "></span><span style="color: #000000; "><br />
</span><span style="color: #0000ff; ">import</span><span style="color: #000000; ">&nbsp;java.text.ParseException;<br />
</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&nbsp;TestSimpleDateFormatThreadSafe&nbsp;</span><span style="color: #0000ff; ">extends</span><span style="color: #000000; ">&nbsp;Thread&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
</span><span style="color: #0000ff; ">&nbsp;&nbsp;&nbsp;&nbsp;public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&nbsp;run()&nbsp;{<br />
</span><span style="color: #0000ff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">true</span><span style="color: #000000; ">)&nbsp;{<br />
</span><span style="color: #0000ff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try</span><span style="color: #000000; ">&nbsp;{<br />
</span><span style="color: #0000ff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this</span><span style="color: #000000; ">.join(</span><span style="color: #000000; ">2000</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff; ">catch</span><span style="color: #000000; ">&nbsp;(InterruptedException&nbsp;e1)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e1.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #0000ff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try</span><span style="color: #000000; ">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(DateUtil.parse(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">2011-10-11&nbsp;06:02:20</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff; ">catch</span><span style="color: #000000; ">&nbsp;(ParseException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
</span><span style="color: #0000ff; ">&nbsp;&nbsp;&nbsp;&nbsp;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;{<br />
</span><span style="color: #0000ff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for</span><span style="color: #000000; ">(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">20</span><span style="color: #000000; ">;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />
</span><span style="color: #0000ff; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new</span>&nbsp;TestSimpleDateFormatThreadSafe().start();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</strong></span></div><p>
<span class="Apple-style-span" style="font-family: 'Courier New'; font-size: 13px; "><strong><span style="color: #0000ff; "></span></strong></span></p>
<div style="padding-top: 4px; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; background-color: #eeeeee; font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; width: 850px; word-break: break-all; "><strong><span style="color: #0000ff; ">package</span><span style="color: #000000; ">&nbsp;com.leisure;<br />
<br />
</span><span style="color: #0000ff; ">import</span><span style="color: #000000; ">&nbsp;java.text.ParseException;<br />
</span><span style="color: #0000ff; ">import</span><span style="color: #000000; ">&nbsp;java.text.SimpleDateFormat;<br />
</span><span style="color: #0000ff; ">import</span><span style="color: #000000; ">&nbsp;java.util.Date;<br />
<br />
</span><span style="color: #0000ff; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">class</span><span style="color: #000000; ">&nbsp;DateUtil&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">static</span><span style="color: #000000; ">&nbsp;SimpleDateFormat&nbsp;sdf&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">new</span><span style="color: #000000; ">&nbsp;SimpleDateFormat(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">yyyy-MM-dd&nbsp;HH:mm:ss</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
<br />
&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;Date&nbsp;parse(String&nbsp;str)&nbsp;</span><span style="color: #0000ff; ">throws</span><span style="color: #000000; ">&nbsp;ParseException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">&nbsp;sdf.parse(str);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></strong></div>
<br />输出结果：
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'Courier New'; ">Tue&nbsp;Oct&nbsp;11&nbsp;</span><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'宋体'; ">18</span><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'Courier New'; ">:02:20&nbsp;CST&nbsp;2011</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'Courier New'; ">Tue&nbsp;Oct&nbsp;11&nbsp;</span><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'宋体'; ">18</span><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'Courier New'; ">:02:20&nbsp;CST&nbsp;2011</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'Courier New'; ">Sun&nbsp;Oct&nbsp;11&nbsp;</span><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'宋体'; ">18</span><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'Courier New'; ">:02:20&nbsp;CST&nbsp;1970</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'Courier New'; ">Tue&nbsp;Oct&nbsp;11&nbsp;</span><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'宋体'; ">18</span><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'Courier New'; ">:02:20&nbsp;CST&nbsp;2011</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'Courier New'; ">Thu&nbsp;Jan&nbsp;01&nbsp;</span><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'宋体'; ">18</span><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'Courier New'; ">:02:20&nbsp;CST&nbsp;1970</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'Courier New'; ">Sat&nbsp;Dec&nbsp;11&nbsp;</span><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'宋体'; ">18</span><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'Courier New'; ">:02:20&nbsp;CST&nbsp;2010</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'Courier New'; ">Tue&nbsp;Oct&nbsp;11&nbsp;</span><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'宋体'; ">18</span><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'Courier New'; ">:02:20&nbsp;CST&nbsp;2011</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:#ff0000; font-size:10.5000pt; font-family:'Courier New'; ">Exception&nbsp;in&nbsp;thread&nbsp;"Thread-18"&nbsp;</span><span style="mso-spacerun:'yes'; color:#000080; text-decoration:underline ;font-size:10.5000pt; font-family:'Courier New'; ">java.lang.NumberFormatException</span><span style="mso-spacerun:'yes'; color:#ff0000; font-size:10.5000pt; font-family:'Courier New'; ">:&nbsp;multiple&nbsp;points</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:#ff0000; font-size:10.5000pt; font-family:'Courier New'; "></span><span style="mso-spacerun:'yes'; color:#ff0000; font-size:10.5000pt; font-family:'Courier New'; ">at&nbsp;sun.misc.FloatingDecimal.readJavaFormatString(Unknown&nbsp;Source)</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:#ff0000; font-size:10.5000pt; font-family:'Courier New'; "></span><span style="mso-spacerun:'yes'; color:#ff0000; font-size:10.5000pt; font-family:'Courier New'; ">at&nbsp;java.lang.Double.parseDouble(Unknown&nbsp;Source)</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:#ff0000; font-size:10.5000pt; font-family:'Courier New'; "></span><span style="mso-spacerun:'yes'; color:#ff0000; font-size:10.5000pt; font-family:'Courier New'; ">at&nbsp;java.text.DigitList.getDouble(Unknown&nbsp;Source)</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:#ff0000; font-size:10.5000pt; font-family:'Courier New'; "></span><span style="mso-spacerun:'yes'; color:#ff0000; font-size:10.5000pt; font-family:'Courier New'; ">at&nbsp;java.text.DecimalFormat.parse(Unknown&nbsp;Source)</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:#ff0000; font-size:10.5000pt; font-family:'Courier New'; "></span><span style="mso-spacerun:'yes'; color:#ff0000; font-size:10.5000pt; font-family:'Courier New'; ">at&nbsp;java.text.SimpleDateFormat.subParse(Unknown&nbsp;Source)</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:#ff0000; font-size:10.5000pt; font-family:'Courier New'; "></span><span style="mso-spacerun:'yes'; color:#ff0000; font-size:10.5000pt; font-family:'Courier New'; ">at&nbsp;java.text.SimpleDateFormat.parse(Unknown&nbsp;Source)</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:#ff0000; font-size:10.5000pt; font-family:'Courier New'; "></span><span style="mso-spacerun:'yes'; color:#ff0000; font-size:10.5000pt; font-family:'Courier New'; ">at&nbsp;java.text.DateFormat.parse(Unknown&nbsp;Source)</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:#ff0000; font-size:10.5000pt; font-family:'Courier New'; "></span><span style="mso-spacerun:'yes'; color:#ff0000; font-size:10.5000pt; font-family:'Courier New'; ">at&nbsp;com.leisure.DateUtil.parse(</span><span style="mso-spacerun:'yes'; color:#000080; text-decoration:underline ;font-size:10.5000pt; font-family:'Courier New'; ">DateUtil.java:12</span><span style="mso-spacerun:'yes'; color:#ff0000; font-size:10.5000pt; font-family:'Courier New'; ">)</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:#ff0000; font-size:10.5000pt; font-family:'Courier New'; "></span><span style="mso-spacerun:'yes'; color:#ff0000; font-size:10.5000pt; font-family:'Courier New'; ">at&nbsp;com.leisure.TestSimpleDateFormatThreadSafe.run(</span><span style="mso-spacerun:'yes'; color:#000080; text-decoration:underline ;font-size:10.5000pt; font-family:'Courier New'; ">TestSimpleDateFormatThreadSafe.java:16</span><span style="mso-spacerun:'yes'; color:#ff0000; font-size:10.5000pt; font-family:'Courier New'; ">)</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'Courier New'; ">Fri&nbsp;Dec&nbsp;23&nbsp;19:02:20&nbsp;CST&nbsp;2011</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'Courier New'; ">Fri&nbsp;Dec&nbsp;23&nbsp;</span><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'宋体'; ">18</span><span style="color: #000000; font-size: 10.5pt; font-family: 'Courier New'; ">:02:20&nbsp;CST&nbsp;2011<br />
<br />
</span></p>
<p style="margin-bottom:0pt; margin-top:0pt; "></p>
<p style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:#000000; font-size:10.5000pt; font-family:'宋体'; ">输出结果很明显了，跟线上数据出现的问题基本一致。不过按照这里看到的结果，有报错，再仔细阅读了应用的底层代码，<br />某个位置拦截了部份异常，没有记录也没有向上抛出处理，到这里，我只想问一句：底层代码谁写的？<br /><br /></span></p>
</div>
</div>
</div><img src ="http://www.blogjava.net/leisure/aggbug/361165.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leisure/" target="_blank">leisure</a> 2011-10-15 00:22 <a href="http://www.blogjava.net/leisure/archive/2011/10/15/361165.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jstl创建map和对map赋值</title><link>http://www.blogjava.net/leisure/archive/2011/10/12/360936.html</link><dc:creator>leisure</dc:creator><author>leisure</author><pubDate>Wed, 12 Oct 2011 00:46:00 GMT</pubDate><guid>http://www.blogjava.net/leisure/archive/2011/10/12/360936.html</guid><wfw:comment>http://www.blogjava.net/leisure/comments/360936.html</wfw:comment><comments>http://www.blogjava.net/leisure/archive/2011/10/12/360936.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leisure/comments/commentRss/360936.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leisure/services/trackbacks/360936.html</trackback:ping><description><![CDATA[<div><div>jstl本身是没有语法技持创建对象的，不过我们可以使用jsp:useBean标签来创建，然后使用c:set标签来赋相</div><div></div><div>应的值。</div><div></div><div><div><div>&lt;jsp:useBean id="map" class="java.util.HashMap" scope="request"&gt;</div><div><span style="white-space: pre; ">	</span>&lt;c:set target="${map}" property="a" value="b" /&gt;</div><div>&lt;/jsp:useBean&gt;</div><div>${map}</div></div></div><div></div><div>另外c:remove可以移除相应的属性。</div><div>更多jstl请参考<a href="http://java.sun.com/products/jsp/jstl/reference/api/index.html" target="_blank">http://java.sun.com/products/jsp/jstl/reference/api/index.html</a></div></div><div></div><img src ="http://www.blogjava.net/leisure/aggbug/360936.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leisure/" target="_blank">leisure</a> 2011-10-12 08:46 <a href="http://www.blogjava.net/leisure/archive/2011/10/12/360936.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse添加git功能</title><link>http://www.blogjava.net/leisure/archive/2011/10/11/360931.html</link><dc:creator>leisure</dc:creator><author>leisure</author><pubDate>Tue, 11 Oct 2011 01:36:00 GMT</pubDate><guid>http://www.blogjava.net/leisure/archive/2011/10/11/360931.html</guid><wfw:comment>http://www.blogjava.net/leisure/comments/360931.html</wfw:comment><comments>http://www.blogjava.net/leisure/archive/2011/10/11/360931.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leisure/comments/commentRss/360931.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leisure/services/trackbacks/360931.html</trackback:ping><description><![CDATA[<div><div>Git是一个开源的分布式版本控制系统，提供了非常快捷和强大的项目版本管理功能。</div><div>EGit项目是一个基于Eclipse插件开发的，很大程度上方便了我们Eclipse一族。</div><div></div><div>Help--&gt;Install New Software--&gt;Add</div><div>Egit</div><div>http://download.eclipse.org/egit/updates/&nbsp;<br />注意egit对应eclipse的版本~</div><div>然后按默认操作，待确认重启即完成安装！</div><div></div><div>详情：&nbsp;<a href="http://eclipse.org/egit/" title="EGit官方网站" target="_blank">EGit官方网站</a></div></div><img src ="http://www.blogjava.net/leisure/aggbug/360931.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leisure/" target="_blank">leisure</a> 2011-10-11 09:36 <a href="http://www.blogjava.net/leisure/archive/2011/10/11/360931.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>推荐几本程序员必读的书籍</title><link>http://www.blogjava.net/leisure/archive/2011/10/05/360021.html</link><dc:creator>leisure</dc:creator><author>leisure</author><pubDate>Tue, 04 Oct 2011 16:42:00 GMT</pubDate><guid>http://www.blogjava.net/leisure/archive/2011/10/05/360021.html</guid><wfw:comment>http://www.blogjava.net/leisure/comments/360021.html</wfw:comment><comments>http://www.blogjava.net/leisure/archive/2011/10/05/360021.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leisure/comments/commentRss/360021.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leisure/services/trackbacks/360021.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 读过了不少的书籍，细数这几年，算起来，买书也花了不少银两，在此推荐几本必读的书籍。&nbsp;&nbsp;<a href='http://www.blogjava.net/leisure/archive/2011/10/05/360021.html'>阅读全文</a><img src ="http://www.blogjava.net/leisure/aggbug/360021.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leisure/" target="_blank">leisure</a> 2011-10-05 00:42 <a href="http://www.blogjava.net/leisure/archive/2011/10/05/360021.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>using dom4j to handle xml 使用dom4j操作xml</title><link>http://www.blogjava.net/leisure/archive/2011/09/20/358715.html</link><dc:creator>leisure</dc:creator><author>leisure</author><pubDate>Mon, 19 Sep 2011 16:16:00 GMT</pubDate><guid>http://www.blogjava.net/leisure/archive/2011/09/20/358715.html</guid><wfw:comment>http://www.blogjava.net/leisure/comments/358715.html</wfw:comment><comments>http://www.blogjava.net/leisure/archive/2011/09/20/358715.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leisure/comments/commentRss/358715.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leisure/services/trackbacks/358715.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: dom4j是一个非常简单的开源项目。该类库底层主要借助了Java集合框架，完美地支持对XML，XPath和XSLT的操作！<br>以一个xml为例，分别展示出dom4j操作xml的常用操作(读取，查找节点，移除，输出... ...&nbsp;&nbsp;<a href='http://www.blogjava.net/leisure/archive/2011/09/20/358715.html'>阅读全文</a><img src ="http://www.blogjava.net/leisure/aggbug/358715.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leisure/" target="_blank">leisure</a> 2011-09-20 00:16 <a href="http://www.blogjava.net/leisure/archive/2011/09/20/358715.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java自动获取安装在线数字证书</title><link>http://www.blogjava.net/leisure/archive/2011/09/18/358655.html</link><dc:creator>leisure</dc:creator><author>leisure</author><pubDate>Sun, 18 Sep 2011 15:36:00 GMT</pubDate><guid>http://www.blogjava.net/leisure/archive/2011/09/18/358655.html</guid><wfw:comment>http://www.blogjava.net/leisure/comments/358655.html</wfw:comment><comments>http://www.blogjava.net/leisure/archive/2011/09/18/358655.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leisure/comments/commentRss/358655.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leisure/services/trackbacks/358655.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 主要原理是：使用socket尝试对目标服务器进行通信，如果通信失败，证明没有证书，不过此时的证书已悄悄发送到客户端了。<br><br>以前写过这个工具类了：http://leisuredev.iteye.com/admin/blogs/714742<br>今天稍微注释并整理了一个版本：&nbsp;&nbsp;<a href='http://www.blogjava.net/leisure/archive/2011/09/18/358655.html'>阅读全文</a><img src ="http://www.blogjava.net/leisure/aggbug/358655.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leisure/" target="_blank">leisure</a> 2011-09-18 23:36 <a href="http://www.blogjava.net/leisure/archive/2011/09/18/358655.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java安装本地证书</title><link>http://www.blogjava.net/leisure/archive/2011/09/17/358877.html</link><dc:creator>leisure</dc:creator><author>leisure</author><pubDate>Sat, 17 Sep 2011 13:13:00 GMT</pubDate><guid>http://www.blogjava.net/leisure/archive/2011/09/17/358877.html</guid><wfw:comment>http://www.blogjava.net/leisure/comments/358877.html</wfw:comment><comments>http://www.blogjava.net/leisure/archive/2011/09/17/358877.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/leisure/comments/commentRss/358877.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leisure/services/trackbacks/358877.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一：生成keystore文件<br>keytool是Java的数字证书管理工具，位于%JAVA_HOME%\bin目录下，keytool可以将密钥（key）和证书（certificates）存在一个称为keystore的文件中。<br><br>D:\>keytool -import -file d:\google.cer -keystore d:\google.keystore<br>输入keystore密码：<br>再次输入新密码:<br>所有者:CN=www.google.com, O=Google Inc, L=Mountain View, ST=California, C=US<br>签发人:CN=Thawte SGC CA, O=Thawte Consulting (Pty) Ltd., C=ZA&nbsp;&nbsp;<a href='http://www.blogjava.net/leisure/archive/2011/09/17/358877.html'>阅读全文</a><img src ="http://www.blogjava.net/leisure/aggbug/358877.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leisure/" target="_blank">leisure</a> 2011-09-17 21:13 <a href="http://www.blogjava.net/leisure/archive/2011/09/17/358877.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>