﻿<?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-:::起跑线:::</title><link>http://www.blogjava.net/hywavesoft/</link><description>专注于J2EE企业开发解决方案</description><language>zh-cn</language><lastBuildDate>Sun, 03 May 2026 06:25:12 GMT</lastBuildDate><pubDate>Sun, 03 May 2026 06:25:12 GMT</pubDate><ttl>60</ttl><item><title>SOA基础设施：XFire客户端流程分析</title><link>http://www.blogjava.net/hywavesoft/archive/2008/03/02/183262.html</link><dc:creator>TonySoft</dc:creator><author>TonySoft</author><pubDate>Sun, 02 Mar 2008 07:12:00 GMT</pubDate><guid>http://www.blogjava.net/hywavesoft/archive/2008/03/02/183262.html</guid><wfw:comment>http://www.blogjava.net/hywavesoft/comments/183262.html</wfw:comment><comments>http://www.blogjava.net/hywavesoft/archive/2008/03/02/183262.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/hywavesoft/comments/commentRss/183262.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hywavesoft/services/trackbacks/183262.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: XFire是当前J2EE领域非常流行的Web Service框架，以其卓越的性能和简单易用的特性博得了广大开发者的青睐。目前XFire已经演变为Apache的CXF项目，但仍有大量用户在使用XFire。<br><br>本文粗略的介绍了XFire客户端的调用流程，并着重讲解了Handler的扩展机制及其应用场景，力求读者能够通过本文对XFire能有更加深入的了解和掌握。文中难免存在不足之处，欢迎任何形式的交流。&nbsp;&nbsp;<a href='http://www.blogjava.net/hywavesoft/archive/2008/03/02/183262.html'>阅读全文</a><img src ="http://www.blogjava.net/hywavesoft/aggbug/183262.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hywavesoft/" target="_blank">TonySoft</a> 2008-03-02 15:12 <a href="http://www.blogjava.net/hywavesoft/archive/2008/03/02/183262.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编写干净的单元测试用例——Callback &amp; Template Pattern在单元测试中的应用</title><link>http://www.blogjava.net/hywavesoft/archive/2007/12/28/171321.html</link><dc:creator>TonySoft</dc:creator><author>TonySoft</author><pubDate>Fri, 28 Dec 2007 13:19:00 GMT</pubDate><guid>http://www.blogjava.net/hywavesoft/archive/2007/12/28/171321.html</guid><wfw:comment>http://www.blogjava.net/hywavesoft/comments/171321.html</wfw:comment><comments>http://www.blogjava.net/hywavesoft/archive/2007/12/28/171321.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/hywavesoft/comments/commentRss/171321.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hywavesoft/services/trackbacks/171321.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 如何编写干净的单元测试用例——Callback &amp; Template Pattern在单元测试中的应用&nbsp;关键词：Callback Function 回调模式 Template Method 模板方法 单元测试目标读者：开发工程师级别：初、中级&nbsp;篇首语&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...&nbsp;&nbsp;<a href='http://www.blogjava.net/hywavesoft/archive/2007/12/28/171321.html'>阅读全文</a><img src ="http://www.blogjava.net/hywavesoft/aggbug/171321.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hywavesoft/" target="_blank">TonySoft</a> 2007-12-28 21:19 <a href="http://www.blogjava.net/hywavesoft/archive/2007/12/28/171321.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EasyJWeb中如何使用Google Guice容器</title><link>http://www.blogjava.net/hywavesoft/archive/2007/08/16/137410.html</link><dc:creator>TonySoft</dc:creator><author>TonySoft</author><pubDate>Thu, 16 Aug 2007 14:48:00 GMT</pubDate><guid>http://www.blogjava.net/hywavesoft/archive/2007/08/16/137410.html</guid><wfw:comment>http://www.blogjava.net/hywavesoft/comments/137410.html</wfw:comment><comments>http://www.blogjava.net/hywavesoft/archive/2007/08/16/137410.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/hywavesoft/comments/commentRss/137410.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hywavesoft/services/trackbacks/137410.html</trackback:ping><description><![CDATA[<p>本文力求简洁，希望通过一个简单的demo应用讲解EasyJWeb与Guice容器的集成。<br><br>通过EasyJWeb提供的超级IoC容器，你可以非常轻松的把Guice容器集成进来，让Guice来管理业务层的依赖关系，EasyJWeb只负责表现。我们看下面的配置：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">&lt;?</span><span style="COLOR: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="utf-8"</span><span style="COLOR: #0000ff">?&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">easyjf-web</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">modules&nbsp;</span><span style="COLOR: #ff0000">inject</span><span style="COLOR: #0000ff">="auto"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">module&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="guice"</span><span style="COLOR: #ff0000">&nbsp;path</span><span style="COLOR: #0000ff">="/guice"</span><span style="COLOR: #ff0000">&nbsp;form</span><span style="COLOR: #0000ff">=""</span><span style="COLOR: #ff0000">&nbsp;&nbsp;scope</span><span style="COLOR: #0000ff">="request"</span><span style="COLOR: #ff0000">&nbsp;action</span><span style="COLOR: #0000ff">="com.easyjf.demo.action.GuiceAction"</span><span style="COLOR: #ff0000">&nbsp;defaultPage</span><span style="COLOR: #0000ff">="index"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">page&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="index"</span><span style="COLOR: #ff0000">&nbsp;url</span><span style="COLOR: #0000ff">="/guice.html"</span><span style="COLOR: #ff0000">&nbsp;type</span><span style="COLOR: #0000ff">="template"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">module</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">modules</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">beans</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="GuiceContainer"</span><span style="COLOR: #ff0000">&nbsp;class</span><span style="COLOR: #0000ff">="com.easyjf.container.impl.GuiceContainer"</span><span style="COLOR: #ff0000">&nbsp;scope</span><span style="COLOR: #0000ff">="singleton"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="modules"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">list</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">com.easyjf.demo.module.GuiceModule</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">list</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="stage"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">DEVELOPMENT</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">value</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">property</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">beans</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">easyjf-web</span><span style="COLOR: #0000ff">&gt;</span></div>
<br>熟悉EasyJWeb的朋友都知道，上面的配置通过/guice.ejf便可以访问GuiceAction业务。特别之处在于我们在这里配置了一个&#8220;GuiceContainer&#8221;的bean，该bean负责集成EasyJWeb与Guice。属性modules的每个类都要继承Guice的AbstractModule类，以实现客户化的装配逻辑；stage属性代表Guice容器的运行环境，既生产环境或开发环境。下面我们看一下上面配置文件中GuiceModule的实现：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_0_112_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_112_Open_Text.style.display='none'; Codehighlighter1_0_112_Closed_Image.style.display='inline'; Codehighlighter1_0_112_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_112_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_112_Closed_Text.style.display='none'; Codehighlighter1_0_112_Open_Image.style.display='inline'; Codehighlighter1_0_112_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_112_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**&nbsp;*/</span><span id=Codehighlighter1_0_112_Open_Text><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;</span><span style="COLOR: #808080">@author</span><span style="COLOR: #008000">&nbsp;ecsoftcn@hotmail.com<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;</span><span style="COLOR: #808080">@version</span><span style="COLOR: #008000">&nbsp;$Id:&nbsp;GuiceModule.java,&nbsp;2007-4-23&nbsp;上午03:31:33&nbsp;Tony&nbsp;Exp&nbsp;$<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_162_365_Open_Image onclick="this.style.display='none'; Codehighlighter1_162_365_Open_Text.style.display='none'; Codehighlighter1_162_365_Closed_Image.style.display='inline'; Codehighlighter1_162_365_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_162_365_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_162_365_Closed_Text.style.display='none'; Codehighlighter1_162_365_Open_Image.style.display='inline'; Codehighlighter1_162_365_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;GuiceModule&nbsp;</span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000">&nbsp;AbstractModule&nbsp;</span><span id=Codehighlighter1_162_365_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_162_365_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_166_227_Open_Image onclick="this.style.display='none'; Codehighlighter1_166_227_Open_Text.style.display='none'; Codehighlighter1_166_227_Closed_Image.style.display='inline'; Codehighlighter1_166_227_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_166_227_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_166_227_Closed_Text.style.display='none'; Codehighlighter1_166_227_Open_Image.style.display='inline'; Codehighlighter1_166_227_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_166_227_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_166_227_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@see&nbsp;com.google.inject.AbstractModule#configure()<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;@Override<br><img id=Codehighlighter1_268_362_Open_Image onclick="this.style.display='none'; Codehighlighter1_268_362_Open_Text.style.display='none'; Codehighlighter1_268_362_Closed_Image.style.display='inline'; Codehighlighter1_268_362_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_268_362_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_268_362_Closed_Text.style.display='none'; Codehighlighter1_268_362_Open_Image.style.display='inline'; Codehighlighter1_268_362_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;configure()&nbsp;</span><span id=Codehighlighter1_268_362_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_268_362_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.bindInterceptor(any(),&nbsp;annotatedWith(Logging.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">),&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;LoggingInterceptor());<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
至于这个类的具体装配逻辑我在此不详细描述，读者只要知道是绑定拦截器就可以了，有兴趣的可以参阅Guice的文档。在configure方法中，你可以随心所欲的实现任何客户化的装配逻辑。接下来我们再看一下上面GuiceAction的实现：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_0_113_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_113_Open_Text.style.display='none'; Codehighlighter1_0_113_Closed_Image.style.display='inline'; Codehighlighter1_0_113_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_113_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_113_Closed_Text.style.display='none'; Codehighlighter1_0_113_Open_Image.style.display='inline'; Codehighlighter1_0_113_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_113_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**&nbsp;*/</span><span id=Codehighlighter1_0_113_Open_Text><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;</span><span style="COLOR: #808080">@author</span><span style="COLOR: #008000">&nbsp;ecsoftcn@hotmail.com<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;</span><span style="COLOR: #808080">@version</span><span style="COLOR: #008000">&nbsp;$Id:&nbsp;GuiceAction.java,&nbsp;2007-4-23&nbsp;上午03:15:47&nbsp;Tony&nbsp;Exp&nbsp;$<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>@SessionScoped<br><img id=Codehighlighter1_177_581_Open_Image onclick="this.style.display='none'; Codehighlighter1_177_581_Open_Text.style.display='none'; Codehighlighter1_177_581_Closed_Image.style.display='inline'; Codehighlighter1_177_581_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_177_581_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_177_581_Closed_Text.style.display='none'; Codehighlighter1_177_581_Open_Image.style.display='inline'; Codehighlighter1_177_581_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;GuiceAction&nbsp;</span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000">&nbsp;IWebAction&nbsp;</span><span id=Codehighlighter1_177_581_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_177_581_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;@Inject<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;GuiceService&nbsp;&nbsp;&nbsp;&nbsp;guiceService;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_255_351_Open_Image onclick="this.style.display='none'; Codehighlighter1_255_351_Open_Text.style.display='none'; Codehighlighter1_255_351_Closed_Image.style.display='inline'; Codehighlighter1_255_351_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_255_351_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_255_351_Closed_Text.style.display='none'; Codehighlighter1_255_351_Open_Image.style.display='inline'; Codehighlighter1_255_351_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_255_351_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_255_351_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@see&nbsp;com.easyjf.web.IWebAction#execute(com.easyjf.web.WebForm,&nbsp;com.easyjf.web.Module)<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;@Logging<br><img id=Codehighlighter1_430_578_Open_Image onclick="this.style.display='none'; Codehighlighter1_430_578_Open_Text.style.display='none'; Codehighlighter1_430_578_Closed_Image.style.display='inline'; Codehighlighter1_430_578_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_430_578_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_430_578_Closed_Text.style.display='none'; Codehighlighter1_430_578_Open_Image.style.display='inline'; Codehighlighter1_430_578_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Page&nbsp;execute(WebForm&nbsp;form,&nbsp;Module&nbsp;module)&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception&nbsp;</span><span id=Codehighlighter1_430_578_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_430_578_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;form.addResult(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">message</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;guiceService.sayHelloToGuice());<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;form.addResult(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">count</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;count);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;module.findPage(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">index</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
注意到上面的代码中，GuiceAction实现了EasyJWeb的IWebAction接口，不同的地方是这个类中多了几个Annotation:@SessionScoped,@Inject和@Logging，:@SessionScoped代表该类的作用域；@Inject代表该类引用了Guice容器中的一个bean[GuiceService]；@Logging代表这个方法需要记录日志，就是通过刚才的拦截器实现的。下面给出GuiceService极其实现类：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_0_113_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_113_Open_Text.style.display='none'; Codehighlighter1_0_113_Closed_Image.style.display='inline'; Codehighlighter1_0_113_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_113_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_113_Closed_Text.style.display='none'; Codehighlighter1_0_113_Open_Image.style.display='inline'; Codehighlighter1_0_113_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_113_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**&nbsp;*/</span><span id=Codehighlighter1_0_113_Open_Text><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;</span><span style="COLOR: #808080">@author</span><span style="COLOR: #008000">&nbsp;ecsoftcn@hotmail.com<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;</span><span style="COLOR: #808080">@version</span><span style="COLOR: #008000">&nbsp;$Id:&nbsp;GuiceService.java,&nbsp;2007-4-23&nbsp;上午03:16:20&nbsp;Tony&nbsp;Exp&nbsp;$<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>@ImplementedBy(GuiceServiceImpl.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_184_223_Open_Image onclick="this.style.display='none'; Codehighlighter1_184_223_Open_Text.style.display='none'; Codehighlighter1_184_223_Closed_Image.style.display='inline'; Codehighlighter1_184_223_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_184_223_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_184_223_Closed_Text.style.display='none'; Codehighlighter1_184_223_Open_Image.style.display='inline'; Codehighlighter1_184_223_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000">&nbsp;GuiceService&nbsp;</span><span id=Codehighlighter1_184_223_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_184_223_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;String&nbsp;sayHelloToGuice();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
实现：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_0_117_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_117_Open_Text.style.display='none'; Codehighlighter1_0_117_Closed_Image.style.display='inline'; Codehighlighter1_0_117_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_117_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_117_Closed_Text.style.display='none'; Codehighlighter1_0_117_Open_Image.style.display='inline'; Codehighlighter1_0_117_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_117_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**&nbsp;*/</span><span id=Codehighlighter1_0_117_Open_Text><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;</span><span style="COLOR: #808080">@author</span><span style="COLOR: #008000">&nbsp;ecsoftcn@hotmail.com<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;</span><span style="COLOR: #808080">@version</span><span style="COLOR: #008000">&nbsp;$Id:&nbsp;GuiceServiceImpl.java,&nbsp;2007-4-23&nbsp;上午03:17:24&nbsp;Tony&nbsp;Exp&nbsp;$<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>@Singleton<br><img id=Codehighlighter1_184_403_Open_Image onclick="this.style.display='none'; Codehighlighter1_184_403_Open_Text.style.display='none'; Codehighlighter1_184_403_Closed_Image.style.display='inline'; Codehighlighter1_184_403_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_184_403_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_184_403_Closed_Text.style.display='none'; Codehighlighter1_184_403_Open_Image.style.display='inline'; Codehighlighter1_184_403_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;GuiceServiceImpl&nbsp;</span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000">&nbsp;GuiceService&nbsp;</span><span id=Codehighlighter1_184_403_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_184_403_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_188_251_Open_Image onclick="this.style.display='none'; Codehighlighter1_188_251_Open_Text.style.display='none'; Codehighlighter1_188_251_Closed_Image.style.display='inline'; Codehighlighter1_188_251_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_188_251_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_188_251_Closed_Text.style.display='none'; Codehighlighter1_188_251_Open_Image.style.display='inline'; Codehighlighter1_188_251_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_188_251_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_188_251_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@see&nbsp;com.easyjf.demo.GuiceService#sayHelloToGuice()<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;@Logging<br><img id=Codehighlighter1_296_400_Open_Image onclick="this.style.display='none'; Codehighlighter1_296_400_Open_Text.style.display='none'; Codehighlighter1_296_400_Closed_Image.style.display='inline'; Codehighlighter1_296_400_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_296_400_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_296_400_Closed_Text.style.display='none'; Codehighlighter1_296_400_Open_Image.style.display='inline'; Codehighlighter1_296_400_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;String&nbsp;sayHelloToGuice()&nbsp;</span><span id=Codehighlighter1_296_400_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_296_400_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Execute&nbsp;GuiceServiceImpl#sayHelloToGuice()</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Hello,&nbsp;Guice!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
这两个类中都使用了Guice的Annotation来声明装配原则，具体含义请参考Guice文档。<br><br>到此为止，一个简单的Demo就算介绍完了，欢迎交流。
<img src ="http://www.blogjava.net/hywavesoft/aggbug/137410.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hywavesoft/" target="_blank">TonySoft</a> 2007-08-16 22:48 <a href="http://www.blogjava.net/hywavesoft/archive/2007/08/16/137410.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于远程调用（XFire/HttpInvoker/Hessian etc.）及远程服务管理的一些随想</title><link>http://www.blogjava.net/hywavesoft/archive/2007/03/17/service-xfire-hessian-httpinvoker.html</link><dc:creator>TonySoft</dc:creator><author>TonySoft</author><pubDate>Sat, 17 Mar 2007 06:07:00 GMT</pubDate><guid>http://www.blogjava.net/hywavesoft/archive/2007/03/17/service-xfire-hessian-httpinvoker.html</guid><wfw:comment>http://www.blogjava.net/hywavesoft/comments/104448.html</wfw:comment><comments>http://www.blogjava.net/hywavesoft/archive/2007/03/17/service-xfire-hessian-httpinvoker.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/hywavesoft/comments/commentRss/104448.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hywavesoft/services/trackbacks/104448.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在现代J2EE企业应用系统中，存在着Hessian、HttpInvoker、XFire、Axis等多种形式的远程调用技术。尽管有Spring等框架对这些技术进行了封装，降低了使用的复杂度，但对普通程序员而言仍是复杂的——至少需要要掌握这些技术的基础知识。<br><br>无论使用那种技术，其基本原理都是一样的：服务端生成骨架，对外暴露服务；客户端生成服务代理，访问调用服务。通常情况下，生成服务代理的代价比较高昂，这也是我们第一次访问远程服务速度比较慢的原因，为每个请求生成新的服务代理恐怕不是我们所期望的。更何况，如果采用这种方式，就要在代码里针对各种不同的技术（如XFire、HttpInvoker）编写不同的服务生成和调用的处理代码。不仅麻烦，而且容易出错。我想，没有人愿意去直接操作各种框架技术的底层代码，这并不是一个好注意！<br><br>作为一种替代方案，我们设计了一个“服务池”的功能，或者说“服务工厂”更贴切一点。先看下面这张类图：<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/hywavesoft/archive/2007/03/17/service-xfire-hessian-httpinvoker.html'>阅读全文</a><img src ="http://www.blogjava.net/hywavesoft/aggbug/104448.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hywavesoft/" target="_blank">TonySoft</a> 2007-03-17 14:07 <a href="http://www.blogjava.net/hywavesoft/archive/2007/03/17/service-xfire-hessian-httpinvoker.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>iBatis框架batch处理优化</title><link>http://www.blogjava.net/hywavesoft/archive/2006/12/16/88073.html</link><dc:creator>TonySoft</dc:creator><author>TonySoft</author><pubDate>Fri, 15 Dec 2006 16:07:00 GMT</pubDate><guid>http://www.blogjava.net/hywavesoft/archive/2006/12/16/88073.html</guid><wfw:comment>http://www.blogjava.net/hywavesoft/comments/88073.html</wfw:comment><comments>http://www.blogjava.net/hywavesoft/archive/2006/12/16/88073.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hywavesoft/comments/commentRss/88073.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hywavesoft/services/trackbacks/88073.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 为什么要做batch处理<br><br>Oracle回滚段<br><br>在JDBC中如何做batch处理<br><br>iBatis框架对batch处理的支持<br><br>iBatis框架做batch处理的问题<br><br>修改底层代码，支持多表batch处理<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/hywavesoft/archive/2006/12/16/88073.html'>阅读全文</a><img src ="http://www.blogjava.net/hywavesoft/aggbug/88073.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hywavesoft/" target="_blank">TonySoft</a> 2006-12-16 00:07 <a href="http://www.blogjava.net/hywavesoft/archive/2006/12/16/88073.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WEB Application Design without Struts,Tapestry,Webwork ?</title><link>http://www.blogjava.net/hywavesoft/archive/2005/12/13/23639.html</link><dc:creator>TonySoft</dc:creator><author>TonySoft</author><pubDate>Tue, 13 Dec 2005 05:09:00 GMT</pubDate><guid>http://www.blogjava.net/hywavesoft/archive/2005/12/13/23639.html</guid><wfw:comment>http://www.blogjava.net/hywavesoft/comments/23639.html</wfw:comment><comments>http://www.blogjava.net/hywavesoft/archive/2005/12/13/23639.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hywavesoft/comments/commentRss/23639.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hywavesoft/services/trackbacks/23639.html</trackback:ping><description><![CDATA[<P><STRONG><FONT color=#ff0000><U>WEB Application Design without Struts,Tapestry,Webwork ?</U></FONT></STRONG></P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如今JAVA WEB开发领域出现了许多优秀的framework,像Struts ,Tapestry,Webwork等.而且框架的数量惊人竟达到50多种!每种框架都有自己的优点和缺点,但是人们仍重复的去开发功能一样的东西,而不是在原有的基础上去完善和丰富内容,似乎有些可悲.<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在继续进行介绍前请先看看下面一段介绍:</P>
<UL>
<UL>
<LI><FONT color=#800080>HTML和JAVA之间明确分离</FONT>
<LI><FONT color=#800080>面向对象的组件模型</FONT>
<LI><FONT color=#800080>自动化状态管理</FONT>
<LI><FONT color=#800080>较高的生产率</FONT>
<LI><FONT color=#800080>较低的学习曲线</FONT>
<LI><FONT color=#800080>从Servlet API 和HTTP协议细节中抽离出来</FONT>
<LI><FONT color=#800080>没有XML格式的配置文件</FONT>
<LI><FONT color=#800080>更容易的开发可重用的组件</FONT>&nbsp;</LI></UL>
<LI>下面是原文,我E文不好,不对的地方请多多谅解!</LI>
<UL>
<LI><FONT color=#800080>Clean separation of concerns between HTML and Java </FONT>
<LI><FONT color=#800080>Object-oriented component model </FONT>
<LI><FONT color=#800080>Automated state management </FONT>
<LI><FONT color=#800080>High productivity </FONT>
<LI><FONT color=#800080>Low learning curve </FONT>
<LI><FONT color=#800080>Abstraction away from Servlet API and HTTP protocol details </FONT>
<LI><FONT color=#800080>No XML configuration files </FONT>
<LI><FONT color=#800080>Easy to build reusable components</FONT> </LI></UL></UL>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这是不是你正在苦苦寻找的编程模式呢?到<STRONG><FONT style="BACKGROUND-COLOR: #ffffff" color=#ff0000><A href="http://wicket.sourceforge.net/index.html">Wicket</A></FONT></STRONG>的主页去看看吧,也许哪里会让你感到惊奇!即便是你不打算使用他,你仍然可以学到很多优秀的设计!<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 更多内容请关注本BLOG!</P><img src ="http://www.blogjava.net/hywavesoft/aggbug/23639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hywavesoft/" target="_blank">TonySoft</a> 2005-12-13 13:09 <a href="http://www.blogjava.net/hywavesoft/archive/2005/12/13/23639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>今天申请加入了大连.NET开发团队</title><link>http://www.blogjava.net/hywavesoft/archive/2005/12/08/23048.html</link><dc:creator>TonySoft</dc:creator><author>TonySoft</author><pubDate>Thu, 08 Dec 2005 14:49:00 GMT</pubDate><guid>http://www.blogjava.net/hywavesoft/archive/2005/12/08/23048.html</guid><wfw:comment>http://www.blogjava.net/hywavesoft/comments/23048.html</wfw:comment><comments>http://www.blogjava.net/hywavesoft/archive/2005/12/08/23048.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hywavesoft/comments/commentRss/23048.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hywavesoft/services/trackbacks/23048.html</trackback:ping><description><![CDATA[今天终于加入了大连.NET开发团队，希望在这里能和大家共同交流，共同进步！同时也予祝俱乐部越办越好！<A href="http://www.cnblogs.com/ecsoftcn" target="_blank">http://www.cnblogs.com/ecsoftcn</A> <img src ="http://www.blogjava.net/hywavesoft/aggbug/23048.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hywavesoft/" target="_blank">TonySoft</a> 2005-12-08 22:49 <a href="http://www.blogjava.net/hywavesoft/archive/2005/12/08/23048.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>发现一个开源的WEB报表解决方案</title><link>http://www.blogjava.net/hywavesoft/archive/2005/12/07/22844.html</link><dc:creator>TonySoft</dc:creator><author>TonySoft</author><pubDate>Wed, 07 Dec 2005 05:28:00 GMT</pubDate><guid>http://www.blogjava.net/hywavesoft/archive/2005/12/07/22844.html</guid><wfw:comment>http://www.blogjava.net/hywavesoft/comments/22844.html</wfw:comment><comments>http://www.blogjava.net/hywavesoft/archive/2005/12/07/22844.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hywavesoft/comments/commentRss/22844.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hywavesoft/services/trackbacks/22844.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 今天终于看完了安子写的webwork教程,感觉介绍的很详细,要是能配合一个大一点的完整例子就更好了,呵呵:) . 在这个教程的最后介绍了一个基于WEB的开源报表解决方案,立刻到相关网站上查看了一下,感觉非常的不错,所以写在这里介绍给尚不知道这个项目的朋友.如果有时间的话我打算好好的研究研究这个东东,到时候也会把学习笔记贴上来.<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">OpenReports开源WEB报表解决方案 <A href="http://www.oreports.com">http://www.oreports.com</A>&nbsp;,这个项目使用 JasperReports,WebWork, Velocity, Quartz, and Hibernate等多个开源项目,非常值得学习!</SPAN><img src ="http://www.blogjava.net/hywavesoft/aggbug/22844.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hywavesoft/" target="_blank">TonySoft</a> 2005-12-07 13:28 <a href="http://www.blogjava.net/hywavesoft/archive/2005/12/07/22844.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DWR简介</title><link>http://www.blogjava.net/hywavesoft/archive/2005/12/06/22714.html</link><dc:creator>TonySoft</dc:creator><author>TonySoft</author><pubDate>Tue, 06 Dec 2005 06:47:00 GMT</pubDate><guid>http://www.blogjava.net/hywavesoft/archive/2005/12/06/22714.html</guid><wfw:comment>http://www.blogjava.net/hywavesoft/comments/22714.html</wfw:comment><comments>http://www.blogjava.net/hywavesoft/archive/2005/12/06/22714.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hywavesoft/comments/commentRss/22714.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hywavesoft/services/trackbacks/22714.html</trackback:ping><description><![CDATA[<P>今天在网上闲逛时,无意看到了一篇介绍DWR的文章,感觉翻译的不错,特引用过来.<BR>http://www.jscud.com/srun/news/viewhtml/2_2005_8/113.htm<BR>接下来我会随时增加DWR学习笔记</P><img src ="http://www.blogjava.net/hywavesoft/aggbug/22714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hywavesoft/" target="_blank">TonySoft</a> 2005-12-06 14:47 <a href="http://www.blogjava.net/hywavesoft/archive/2005/12/06/22714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts文件上传</title><link>http://www.blogjava.net/hywavesoft/archive/2005/12/06/22677.html</link><dc:creator>TonySoft</dc:creator><author>TonySoft</author><pubDate>Tue, 06 Dec 2005 02:46:00 GMT</pubDate><guid>http://www.blogjava.net/hywavesoft/archive/2005/12/06/22677.html</guid><wfw:comment>http://www.blogjava.net/hywavesoft/comments/22677.html</wfw:comment><comments>http://www.blogjava.net/hywavesoft/archive/2005/12/06/22677.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/hywavesoft/comments/commentRss/22677.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hywavesoft/services/trackbacks/22677.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Struts文件上传最近在网上看了几篇关于Struts处理文件上传的文章，并进行了整理。但对其中一些问题还是有些迷惑，以待日后解决！&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 现把代码贴出来以供初学者研究：&nbsp;UploadUitl.java&nbsp;/**&nbsp;* 这是一个辅助类，辅助完成上传功能。&nb...&nbsp;&nbsp;<a href='http://www.blogjava.net/hywavesoft/archive/2005/12/06/22677.html'>阅读全文</a><img src ="http://www.blogjava.net/hywavesoft/aggbug/22677.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hywavesoft/" target="_blank">TonySoft</a> 2005-12-06 10:46 <a href="http://www.blogjava.net/hywavesoft/archive/2005/12/06/22677.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>