﻿<?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-wmcoo-文章分类-J2EE</title><link>http://www.blogjava.net/wmcoo/category/46473.html</link><description>岁月神偷</description><language>zh-cn</language><lastBuildDate>Tue, 02 Nov 2010 22:15:23 GMT</lastBuildDate><pubDate>Tue, 02 Nov 2010 22:15:23 GMT</pubDate><ttl>60</ttl><item><title>软件工程之开发流程</title><link>http://www.blogjava.net/wmcoo/articles/334339.html</link><dc:creator>岁月神偷</dc:creator><author>岁月神偷</author><pubDate>Mon, 11 Oct 2010 02:06:00 GMT</pubDate><guid>http://www.blogjava.net/wmcoo/articles/334339.html</guid><wfw:comment>http://www.blogjava.net/wmcoo/comments/334339.html</wfw:comment><comments>http://www.blogjava.net/wmcoo/articles/334339.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wmcoo/comments/commentRss/334339.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wmcoo/services/trackbacks/334339.html</trackback:ping><description><![CDATA[<div><span  style="color: #333333; font-family: Georgia, 'Times New Roman', Times, san-serif; font-size: 14px; line-height: 25px; ">
<p style="line-height: 25px; margin-top: 12px; margin-right: auto; margin-bottom: 12px; margin-left: auto; text-indent: 0px; ">　　<strong style="background-color: #c0c0c0; ">可行性分析</strong></p>
<p style="line-height: 25px; margin-top: 12px; margin-right: auto; margin-bottom: 12px; margin-left: auto; text-indent: 0px; ">　　这个一般都是做战略的专家来做的，他们更加有市场的前瞻性，俗话说就是看的更远一些，搞市场分析、调研，看看我们的想法到底是否可行，可行性有多大，可能会遇到的问题，我们的优势在哪里，可以利用的资源有哪些，需要引进那些资源，有多少对手，他们都进行到了什么程度等等。</p>
<p style="line-height: 25px; margin-top: 12px; margin-right: auto; margin-bottom: 12px; margin-left: auto; text-indent: 0px; ">　　这个阶段的文档成果是：可行性分析报告等</p>
<p style="line-height: 25px; margin-top: 12px; margin-right: auto; margin-bottom: 12px; margin-left: auto; text-indent: 0px; ">　　<span style="background-color: #c0c0c0; "><strong>需求分析</strong></span></p>
<p style="line-height: 25px; margin-top: 12px; margin-right: auto; margin-bottom: 12px; margin-left: auto; text-indent: 0px; ">　　这个已经开始具体操作，经过可行性分析，我们有机会，可以进入这个领域。这时候，需要领域专家参与进来，架构师也要参与进来，还有就是需求分析的专业人士，和最少一名文档员，用来记录开发讨论的结果并形成文档。</p>
<p style="line-height: 25px; margin-top: 12px; margin-right: auto; margin-bottom: 12px; margin-left: auto; text-indent: 0px; ">　　工作就是分解项目的需求，到底要做些什么，要实现什么功能，就是功能的范围和功能的细节，主要还是业务方面的梳理。</p>
<p style="line-height: 25px; margin-top: 12px; margin-right: auto; margin-bottom: 12px; margin-left: auto; text-indent: 0px; ">　　这个阶段的文档成果是：需求分析说明书等</p>
<p style="line-height: 25px; margin-top: 12px; margin-right: auto; margin-bottom: 12px; margin-left: auto; text-indent: 0px; ">　　<strong style="background-color: #c0c0c0; ">概要设计</strong></p>
<p style="line-height: 25px; margin-top: 12px; margin-right: auto; margin-bottom: 12px; margin-left: auto; text-indent: 0px; ">　　经过前面的需求分析，形成了需求分析说明书。这个阶段应该是业务建模，形成业务用例，进一步形成业务用例。这个阶段是分解需求，可以使用<a href="http://zh.wikipedia.org/wiki/PowerDesigner" target="_blank" style="outline-style: none; outline-width: initial; outline-color: initial; text-decoration: none; color: #3d81ee; border-bottom-width: 1px; border-bottom-style: dashed; ">PD(Power Designer)、</a>&nbsp;<a href="http://zh.wikipedia.org/wiki/Rational%E7%BB%9F%E4%B8%80%E8%BF%87%E7%A8%8B" target="_blank" style="outline-style: none; outline-width: initial; outline-color: initial; text-decoration: none; color: #3d81ee; border-bottom-width: 1px; border-bottom-style: dashed; ">Rational</a>等工具来辅助一下。</p>
<p style="line-height: 25px; margin-top: 12px; margin-right: auto; margin-bottom: 12px; margin-left: auto; text-indent: 0px; ">　　这个阶段的文档成果是：概要设计说明书、业务用例文档等</p>
<p style="line-height: 25px; margin-top: 12px; margin-right: auto; margin-bottom: 12px; margin-left: auto; text-indent: 0px; ">　　<strong style="background-color: #c0c0c0; ">详细设计</strong></p>
<p style="line-height: 25px; margin-top: 12px; margin-right: auto; margin-bottom: 12px; margin-left: auto; text-indent: 0px; ">　　有了概要设计，有了模型，可以定义出数据库模型，甚至是可以定义数据库的字段，然后可以让高级程序员来辅助架构师进行架构设计，普通程序员先写实现的技术用例。或者让他们先看看业务用例，熟悉一下业务流程和项目的目标。</p>
<p style="line-height: 25px; margin-top: 12px; margin-right: auto; margin-bottom: 12px; margin-left: auto; text-indent: 0px; ">　　这个阶段的文档成果是：概要设计说明书、技术用例文档等</p>
<p style="line-height: 25px; margin-top: 12px; margin-right: auto; margin-bottom: 12px; margin-left: auto; text-indent: 0px; ">　　<strong style="background-color: #c0c0c0; ">具体开发</strong></p>
<p style="line-height: 25px; margin-top: 12px; margin-right: auto; margin-bottom: 12px; margin-left: auto; text-indent: 0px; ">　　这个阶段就是具体的代码编写了，考验程序员的基本功的时候到了。</p>
<p style="line-height: 25px; margin-top: 12px; margin-right: auto; margin-bottom: 12px; margin-left: auto; text-indent: 0px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关于开发的分工的话，我趋向于分层来分工，这样有以下几个好处：</p>
<p style="line-height: 25px; margin-top: 12px; margin-right: auto; margin-bottom: 12px; margin-left: auto; text-indent: 0px; ">&nbsp;</p>
<ul style="list-style-type: none; list-style-position: initial; list-style-image: initial; margin-top: 10px; margin-right: 10px; margin-bottom: 10px; margin-left: 10px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
    <li style="background-image: url(http://www.cnblogs.com/Skins/Minyx2_Lite/images/icon_miniarrow.gif); padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 15px; background-position: 0px 9px; background-repeat: no-repeat no-repeat; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不用每个人从数据访问写到界面表现，可以集中精力，精益求精，便于后期优化</li>
    <li style="background-image: url(http://www.cnblogs.com/Skins/Minyx2_Lite/images/icon_miniarrow.gif); padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 15px; background-position: 0px 9px; background-repeat: no-repeat no-repeat; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 中间层可拔插，可替换，可以优化，增加可扩展性</li>
</ul>
</span></div>
<img src ="http://www.blogjava.net/wmcoo/aggbug/334339.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wmcoo/" target="_blank">岁月神偷</a> 2010-10-11 10:06 <a href="http://www.blogjava.net/wmcoo/articles/334339.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>maven</title><link>http://www.blogjava.net/wmcoo/articles/333972.html</link><dc:creator>岁月神偷</dc:creator><author>岁月神偷</author><pubDate>Fri, 08 Oct 2010 07:10:00 GMT</pubDate><guid>http://www.blogjava.net/wmcoo/articles/333972.html</guid><wfw:comment>http://www.blogjava.net/wmcoo/comments/333972.html</wfw:comment><comments>http://www.blogjava.net/wmcoo/articles/333972.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wmcoo/comments/commentRss/333972.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wmcoo/services/trackbacks/333972.html</trackback:ping><description><![CDATA[<div><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">maven依赖关系中Scope的作用</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">Dependency Scope</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">在POM .xml中，&lt;dependency&gt;中还引入了&lt;scope&gt;，它主要管理依赖的部署。<br />
<br />
目前&lt;scope&gt;可以使用5个值：</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp; * compile，缺省值，适用于所有阶段，会随着项目一起发布。</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp; * provided，类似compile，期望JDK、容器或使用者会提供这个依赖。如servlet.jar。</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp; * runtime，只在运行时使用，如JDBC驱动，适用运行和测试阶段。</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp; * test，只在测试时使用，用于编译和运行测试代码。不会随项目发布。</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><br />
</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;&nbsp;&nbsp; * system，类似provided，需要显式提供包含依赖的jar，Maven不会在Repository中查找它。</span><span  style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">&nbsp;</span></div>
<img src ="http://www.blogjava.net/wmcoo/aggbug/333972.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wmcoo/" target="_blank">岁月神偷</a> 2010-10-08 15:10 <a href="http://www.blogjava.net/wmcoo/articles/333972.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CGLIB应用</title><link>http://www.blogjava.net/wmcoo/articles/333338.html</link><dc:creator>岁月神偷</dc:creator><author>岁月神偷</author><pubDate>Wed, 29 Sep 2010 02:55:00 GMT</pubDate><guid>http://www.blogjava.net/wmcoo/articles/333338.html</guid><wfw:comment>http://www.blogjava.net/wmcoo/comments/333338.html</wfw:comment><comments>http://www.blogjava.net/wmcoo/articles/333338.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wmcoo/comments/commentRss/333338.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wmcoo/services/trackbacks/333338.html</trackback:ping><description><![CDATA[<span style="font-family: palatino, georgia, verdana, arial, sans-serif; font-size: 14px; line-height: 21px; ">CGLIB被Spring AOP做为底层的一种实现。采用asm,动态生成字节码,比jdk proxy效率高,hibernate使用cglib动态生成DO/PO (接口层对象)字节码.<br />
</span>
<div><span style="font-family: palatino, georgia, verdana, arial, sans-serif; font-size: 14px; line-height: 21px; ">cglib依赖包<br />
asm<br />
<a href="http://forge.ow2.org/projects/asm/">http://forge.ow2.org/projects/asm/</a><br />
cglib<a href="http://cglib.sourceforge.net/">http://cglib.sourceforge.net</a>/</span></div>
<br />
<br />
<fieldset><legend>CglibProxy.java</legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #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; ">package</span><span style="color: #000000; ">&nbsp;com.java.demo.mode.proxy.cglib;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.lang.reflect.Method;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.java.demo.mode.builder.Builder;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.java.demo.mode.builder.IMadeRobot;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.java.demo.mode.builder.MadeRobot;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;net.sf.cglib.proxy.MethodInterceptor;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;net.sf.cglib.proxy.MethodProxy;<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;CglibProxy&nbsp;&nbsp;</span><span style="color: #0000FF; ">implements</span><span style="color: #000000; ">&nbsp;MethodInterceptor&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;Object&nbsp;intercept(Object&nbsp;obj,&nbsp;Method&nbsp;method,&nbsp;Object[]&nbsp;args,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MethodProxy&nbsp;proxy)&nbsp;</span><span style="color: #0000FF; ">throws</span><span style="color: #000000; ">&nbsp;Throwable&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doBefore();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;ob</span><span style="color: #000000; ">=</span><span style="color: #000000; ">proxy.invokeSuper(obj,&nbsp;args);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doAfter();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;ob;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;doBefore()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">开始制造机器人.</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IMadeRobot&nbsp;imr</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;MadeRobot();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Builder&nbsp;builder</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Builder(imr);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder.build();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imr.finish();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;doAfter()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">完成机器人制造.\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}<br />
</span></div>
</fieldset><br />
<fieldset><legend>RobotFactory.java</legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #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; ">package</span><span style="color: #000000; ">&nbsp;com.java.demo.mode.proxy.cglib;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.java.demo.data.Product;<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;RobotFactory{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;Product&nbsp;getRobot(String&nbsp;className){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Product&nbsp;robot</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;robot</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(Product)(Class.forName(className).newInstance());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">&nbsp;(ClassNotFoundException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">&nbsp;(InstantiationException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">&nbsp;(IllegalAccessException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;robot;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}<br />
</span></div>
</fieldset><br />
<fieldset><legend>CglibFilter.java</legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #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; ">package</span><span style="color: #000000; ">&nbsp;com.java.demo.mode.proxy.cglib;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.lang.reflect.Method;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;net.sf.cglib.proxy.CallbackFilter;<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;CglibFilter&nbsp;</span><span style="color: #0000FF; ">implements</span><span style="color: #000000; ">&nbsp;CallbackFilter&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">final</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;YES</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">不执行代理</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">final</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;NO</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">执行代理</span><span style="color: #008000; "><br />
</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;accept(Method&nbsp;arg0)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">对所调用的方法名进行过滤</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;YES;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}<br />
</span></div>
</fieldset><br />
<br />
<fieldset><legend>Demo.java</legend>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #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; ">package</span><span style="color: #000000; ">&nbsp;com.java.demo.mode.proxy.cglib;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;net.sf.cglib.proxy.Callback;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;net.sf.cglib.proxy.Enhancer;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;net.sf.cglib.proxy.NoOp;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.java.demo.data.Product;<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;Demo&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;args<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><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;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">cglib中的NoOp.INSTANCE就是一个空的拦截器<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">setCallbacks中的拦截器(interceptor)的顺序，一定要和CallbackFilter里面指定的顺序一致！！切忌。</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enhancer&nbsp;enhancer&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Enhancer();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enhancer.setSuperclass(RobotFactory.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enhancer.setCallbacks(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Callback[]{</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;CglibProxy(),&nbsp;NoOp.INSTANCE});<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enhancer.setCallbackFilter(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;CglibFilter());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RobotFactory&nbsp;factory</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(RobotFactory)&nbsp;enhancer.create();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Product&nbsp;robot&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">factory.getRobot(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">com.java.demo.data.robot.RobotA</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;robot.desc();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
}<br />
</span></div>
</fieldset><br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/wmcoo/aggbug/333338.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wmcoo/" target="_blank">岁月神偷</a> 2010-09-29 10:55 <a href="http://www.blogjava.net/wmcoo/articles/333338.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>