﻿<?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-seasun-随笔分类-1.15 guice</title><link>http://www.blogjava.net/shiwenfeng/category/43438.html</link><description>在不断模仿、思考、总结中一步一步进步！</description><language>zh-cn</language><lastBuildDate>Fri, 08 Jan 2010 05:11:08 GMT</lastBuildDate><pubDate>Fri, 08 Jan 2010 05:11:08 GMT</pubDate><ttl>60</ttl><item><title>guice和dwr的整合</title><link>http://www.blogjava.net/shiwenfeng/archive/2010/01/06/308483.html</link><dc:creator>shiwf</dc:creator><author>shiwf</author><pubDate>Wed, 06 Jan 2010 10:46:00 GMT</pubDate><guid>http://www.blogjava.net/shiwenfeng/archive/2010/01/06/308483.html</guid><wfw:comment>http://www.blogjava.net/shiwenfeng/comments/308483.html</wfw:comment><comments>http://www.blogjava.net/shiwenfeng/archive/2010/01/06/308483.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/shiwenfeng/comments/commentRss/308483.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/shiwenfeng/services/trackbacks/308483.html</trackback:ping><description><![CDATA[<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="ProgId" content="Word.Document" />
<meta name="Generator" content="Microsoft Word 12" />
<meta name="Originator" content="Microsoft Word 12" />
<link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cshiwf%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml" />
<link rel="themeData" href="file:///C:%5CDOCUME%7E1%5Cshiwf%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx" />
<link rel="colorSchemeMapping" href="file:///C:%5CDOCUME%7E1%5Cshiwf%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml" /><!--[if gte mso 9]><xml>
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
MicrosoftInternetExplorer4
</xml><![endif]--><!--[if gte mso 9]><![endif]--><style>
<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:""@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{
mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Calibri","sans-serif";
mso-bidi-font-family:"Times New Roman";}
.MsoChpDefault
{
mso-bidi-font-family:"Times New Roman";}
/* Page Definitions */
@page
{}
@page Section1
{size:595.3pt 841.9pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
layout-grid:15.6pt;}
div.Section1
{page:Section1;}
-->
</style><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{
mso-style-parent:"";
font-size:10.5pt;
font-family:"Calibri","sans-serif";}
</style>
<![endif]-->
<p style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: 宋体;"><span style="color: #9e0000;">本文转自:<a href="http://www.blogjava.net/xylz/">http://www.blogjava.net/xylz/</a></span><br />
</span></p>
<p style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: 宋体;">DWR</span><span style="font-size: 10pt; font-family: 宋体;">作为Ajax远程调用的服务端得到了很多程序员的追捧，在DWR的2.x版本中已经集成了Guice的插件。</span></p>
<p style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: 宋体;">老套了，我们还是定义一个HelloWorld的服务吧，哎，就喜欢HelloWorld，不怕被别人骂！&nbsp;</span></p>
<p style="background: #eeeeee none repeat scroll 0% 0%; text-align: left; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" align="left"><span style="font-size: 10pt; font-family: 宋体; color: teal;">1</span><span style="font-size: 10pt; font-family: 宋体;">&nbsp;<span style="color: blue;">public</span>&nbsp;<span style="color: blue;">interface</span><span style="color: black;">&nbsp;HelloWorld&nbsp;{<br />
</span><span style="color: teal;">2</span>&nbsp;<span style="color: black;"><br />
</span><span style="color: teal;">3</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sayHello();<br />
</span><span style="color: teal;">4</span>&nbsp;<span style="color: black;"><br />
</span><span style="color: teal;">5</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;getSystemDate();<br />
</span><span style="color: teal;">6</span>&nbsp;<span style="color: black;">}<br />
</span><span style="color: teal;">7</span>&nbsp;</span></p>
<p style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: 宋体;">然后写一个简单的实现吧。&nbsp;</span></p>
<p style="background: #eeeeee none repeat scroll 0% 0%; text-align: left; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" align="left"><span style="font-size: 10pt; font-family: 宋体; color: teal;">&nbsp;1</span><span style="font-size: 10pt; font-family: 宋体;">&nbsp;<span style="color: blue;">public</span>&nbsp;<span style="color: blue;">class</span><span style="color: black;">&nbsp;HelloWorldImpl&nbsp;</span><span style="color: blue;">implements</span><span style="color: black;">&nbsp;HelloWorld&nbsp;{<br />
</span><span style="color: teal;">&nbsp;2</span>&nbsp;<span style="color: black;"><br />
</span><span style="color: teal;">&nbsp;3</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
</span><span style="color: teal;">&nbsp;4</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">public</span><span style="color: black;">&nbsp;Date&nbsp;getSystemDate()&nbsp;{<br />
</span><span style="color: teal;">&nbsp;5</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">return</span>&nbsp;<span style="color: blue;">new</span><span style="color: black;">&nbsp;Date();<br />
</span><span style="color: teal;">&nbsp;6</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: teal;">&nbsp;7</span>&nbsp;<span style="color: black;"><br />
</span><span style="color: teal;">&nbsp;8</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
</span><span style="color: teal;">&nbsp;9</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">public</span><span style="color: black;">&nbsp;String&nbsp;sayHello()&nbsp;{<br />
</span><span style="color: teal;">10</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">return</span><span style="color: black;">&nbsp;"Hello,&nbsp;guice";<br />
</span><span style="color: teal;">11</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: teal;">12</span>&nbsp;<span style="color: black;">}<br />
</span><span style="color: teal;">13</span>&nbsp;</span></p>
<p style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: 宋体;">然后是与dwr有关的东西了，我们写一个dwr的listener来注入我们的模块。&nbsp;</span></p>
<p style="background: #eeeeee none repeat scroll 0% 0%; text-align: left; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" align="left"><span style="font-size: 10pt; font-family: 宋体; color: teal;">&nbsp;1</span><span style="font-size: 10pt; font-family: 宋体;">&nbsp;<span style="color: blue;">package</span><span style="color: black;">&nbsp;cn.imxylz.study.guice.web.dwr;<br />
</span><span style="color: teal;">&nbsp;2</span>&nbsp;<span style="color: black;"><br />
</span><span style="color: teal;">&nbsp;3</span>&nbsp;<span style="color: blue;">import</span><span style="color: black;">&nbsp;org.directwebremoting.guice.DwrGuiceServletContextListener;<br />
</span><span style="color: teal;">&nbsp;4</span>&nbsp;<span style="color: black;"><br />
</span><span style="color: teal;">&nbsp;5</span>&nbsp;<span style="color: green;">/**<br />
</span><span style="color: teal;">&nbsp;6</span>&nbsp;<span style="color: green;">&nbsp;*&nbsp;</span><span style="color: gray;">@author</span><span style="color: green;">&nbsp;xylz&nbsp;(www.imxylz.cn)<br />
</span><span style="color: teal;">&nbsp;7</span>&nbsp;<span style="color: green;">&nbsp;*&nbsp;</span><span style="color: gray;">@version</span><span style="color: green;">&nbsp;$Rev:&nbsp;105&nbsp;$<br />
</span><span style="color: teal;">&nbsp;8</span>&nbsp;<span style="color: green;">&nbsp;*/</span><span style="color: black;"><br />
</span><span style="color: teal;">&nbsp;9</span>&nbsp;<span style="color: blue;">public</span>&nbsp;<span style="color: blue;">class</span><span style="color: black;">&nbsp;MyDwrGuiceServletContextListener&nbsp;</span><span style="color: blue;">extends</span><span style="color: black;">&nbsp;DwrGuiceServletContextListener{<br />
</span><span style="color: teal;">10</span>&nbsp;<span style="color: black;"><br />
</span><span style="color: teal;">11</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
</span><span style="color: teal;">12</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">protected</span>&nbsp;<span style="color: blue;">void</span><span style="color: black;">&nbsp;configure()&nbsp;{<br />
</span><span style="color: teal;">13</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bindRemotedAs("helloworld",&nbsp;HelloWorld.</span><span style="color: blue;">class</span><span style="color: black;">).to(HelloWorldImpl.</span><span style="color: blue;">class</span><span style="color: black;">).asEagerSingleton();<br />
</span><span style="color: teal;">14</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: teal;">15</span>&nbsp;<span style="color: black;">}<br />
</span><span style="color: teal;">16</span>&nbsp;</span></p>
<p style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: 宋体;">这里使用bindRemotedAs来将我们的服务开放出来供dwr远程调用。</span></p>
<p style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: 宋体;">剩下的就是修改web.xml，需要配置一个dwr的Servlet并且将我们的listener加入其中。看看全部的内容。&nbsp;</span></p>
<p style="background: #eeeeee none repeat scroll 0% 0%; text-align: left; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" align="left"><span style="font-size: 10pt; font-family: 宋体; color: teal;">&nbsp;1</span><span style="font-size: 10pt; font-family: 宋体;">&nbsp;<span style="color: blue;">&lt;?</span><span style="color: fuchsia;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: blue;">?&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">&nbsp;2</span>&nbsp;<span style="color: blue;">&lt;</span><span style="color: maroon;">web-app&nbsp;</span><span style="color: red;">xmlns</span><span style="color: blue;">="http://java.sun.com/xml/ns/javaee"</span><span style="color: red;">&nbsp;xmlns:xsi</span><span style="color: blue;">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: red;"><br />
</span><span style="color: teal;">&nbsp;3</span>&nbsp;<span style="color: red;">&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: blue;">="http://java.sun.com/xml/ns/javaee&nbsp;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</span><span style="color: red;"><br />
</span><span style="color: teal;">&nbsp;4</span>&nbsp;<span style="color: red;">&nbsp;&nbsp;&nbsp;&nbsp;version</span><span style="color: blue;">="2.5"&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">&nbsp;5</span>&nbsp;<span style="color: black;"><br />
</span><span style="color: teal;">&nbsp;6</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">display-name</span><span style="color: blue;">&gt;</span><span style="color: black;">guice-dwr</span><span style="color: blue;">&lt;/</span><span style="color: maroon;">display-name</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">&nbsp;7</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">description</span><span style="color: blue;">&gt;</span><span style="color: black;">xylz&nbsp;study&nbsp;project&nbsp;-&nbsp;guice</span><span style="color: blue;">&lt;/</span><span style="color: maroon;">description</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">&nbsp;8</span>&nbsp;<span style="color: black;"><br />
</span><span style="color: teal;">&nbsp;9</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">listener</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">10</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">listener-class</span><span style="color: blue;">&gt;</span><span style="color: black;">cn.imxylz.study.guice.web.dwr.MyDwrGuiceServletContextListener<br />
</span><span style="color: teal;">11</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;/</span><span style="color: maroon;">listener-class</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">12</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;/</span><span style="color: maroon;">listener</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">13</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">servlet</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">14</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">servlet-name</span><span style="color: blue;">&gt;</span><span style="color: black;">dwr-invoker</span><span style="color: blue;">&lt;/</span><span style="color: maroon;">servlet-name</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">15</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">servlet-class</span><span style="color: blue;">&gt;</span><span style="color: black;">org.directwebremoting.guice.DwrGuiceServlet</span><span style="color: blue;">&lt;/</span><span style="color: maroon;">servlet-class</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">16</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">init-param</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">17</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">param-name</span><span style="color: blue;">&gt;</span><span style="color: black;">debug</span><span style="color: blue;">&lt;/</span><span style="color: maroon;">param-name</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">18</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">param-value</span><span style="color: blue;">&gt;</span><span style="color: black;">true</span><span style="color: blue;">&lt;/</span><span style="color: maroon;">param-value</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">19</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;/</span><span style="color: maroon;">init-param</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">20</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;/</span><span style="color: maroon;">servlet</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">21</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">servlet-mapping</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">22</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">servlet-name</span><span style="color: blue;">&gt;</span><span style="color: black;">dwr-invoker</span><span style="color: blue;">&lt;/</span><span style="color: maroon;">servlet-name</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">23</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">url-pattern</span><span style="color: blue;">&gt;</span><span style="color: black;">/dwr/*</span><span style="color: blue;">&lt;/</span><span style="color: maroon;">url-pattern</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">24</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;/</span><span style="color: maroon;">servlet-mapping</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">25</span>&nbsp;<span style="color: black;"><br />
</span><span style="color: teal;">26</span>&nbsp;<span style="color: blue;">&lt;/</span><span style="color: maroon;">web-app</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">27</span>&nbsp;</span></p>
<p style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: 宋体;">非常简单，也非常简洁，其中DwrGuiceServlet的debug参数只是为了调试方便才开放的，实际中就不用写了。</span></p>
<p style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: 宋体;">好了，看看我们的效果。</span></p>
<p style="background: #eeeeee none repeat scroll 0% 0%; text-align: left; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" align="left"><span style="font-size: 10pt; font-family: 宋体; color: teal;">&nbsp;1</span><span style="font-size: 10pt; font-family: 宋体;">&nbsp;<span style="color: blue;">&lt;</span><span style="color: maroon;">html</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">&nbsp;2</span>&nbsp;<span style="color: blue;">&lt;</span><span style="color: maroon;">head</span><span style="color: blue;">&gt;&lt;</span><span style="color: maroon;">title</span><span style="color: blue;">&gt;</span><span style="color: black;">dwr&nbsp;-&nbsp;test&nbsp;(www.imxylz.cn)&nbsp;</span><span style="color: blue;">&lt;/</span><span style="color: maroon;">title</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">&nbsp;3</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">script&nbsp;</span><span style="color: red;">type</span><span style="color: blue;">='text/javascript'&nbsp;</span><span style="color: red;">src</span><span style="color: blue;">='/guice-dwr/dwr/interface/helloworld.js'&gt;&lt;/</span><span style="color: maroon;">script</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">&nbsp;4</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">script&nbsp;</span><span style="color: red;">type</span><span style="color: blue;">='text/javascript'&nbsp;</span><span style="color: red;">src</span><span style="color: blue;">='/guice-dwr/dwr/engine.js'&gt;&lt;/</span><span style="color: maroon;">script</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">&nbsp;5</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">script&nbsp;</span><span style="color: red;">type</span><span style="color: blue;">='text/javascript'&nbsp;</span><span style="color: red;">src</span><span style="color: blue;">='/guice-dwr/dwr/util.js'&gt;&lt;/</span><span style="color: maroon;">script</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">&nbsp;6</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">script&nbsp;</span><span style="color: red;">type</span><span style="color: blue;">='text/javascript'&gt;</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"><br />
</span><span style="color: teal;">&nbsp;7</span>&nbsp;<span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: blue; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">var</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">&nbsp;showHello&nbsp;=&nbsp;</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: blue; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">function</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">(data){<br />
</span><span style="color: teal;">&nbsp;8</span>&nbsp;<span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwr.util.setValue('result',dwr.util.toDescriptiveString(data,1));&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: teal;">&nbsp;9</span>&nbsp;<span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: teal;">10</span>&nbsp;<span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: blue; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">var</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">&nbsp;getSystemDate&nbsp;=&nbsp;</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: blue; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">function</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">(data){<br />
</span><span style="color: teal;">11</span>&nbsp;<span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwr.util.setValue('systime',dwr.util.toDescriptiveString(data,2));&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: teal;">12</span>&nbsp;<span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: teal;">13</span>&nbsp;<span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">&nbsp;&nbsp;</span><span style="color: blue;">&lt;/</span><span style="color: maroon;">script</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">14</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">style&nbsp;</span><span style="color: red;">type</span><span style="color: blue;">='text/css'&gt;</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: maroon; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"><br />
</span><span style="color: teal;">15</span>&nbsp;<span style="background: whitesmoke none repeat scroll 0% 0%; color: maroon; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">&nbsp;&nbsp;&nbsp;&nbsp;input.button&nbsp;</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">{</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: red; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">&nbsp;border</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">:</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: blue; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">&nbsp;1px&nbsp;outset</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">;</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: red; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">&nbsp;margin</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">:</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: blue; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">&nbsp;0px</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">;</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: red; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">&nbsp;padding</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">:</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: blue; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">&nbsp;0px</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">;</span>&nbsp;<span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">}</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: maroon; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"><br />
</span><span style="color: teal;">16</span>&nbsp;<span style="background: whitesmoke none repeat scroll 0% 0%; color: maroon; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">&nbsp;&nbsp;&nbsp;&nbsp;span&nbsp;</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">{</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: red; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">&nbsp;background</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">:</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: blue; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">&nbsp;#ffffdd</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">;</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: red; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">&nbsp;white-space</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">:</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: blue; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">&nbsp;pre</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">;</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: red; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">&nbsp;padding-left</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">:</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: blue; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">20px</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: black; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">;}</span><span style="background: whitesmoke none repeat scroll 0% 0%; color: maroon; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"><br />
</span><span style="color: teal;">17</span>&nbsp;<span style="background: whitesmoke none repeat scroll 0% 0%; color: maroon; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">&nbsp;&nbsp;</span><span style="color: blue;">&lt;/</span><span style="color: maroon;">style</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">18</span>&nbsp;<span style="color: blue;">&lt;/</span><span style="color: maroon;">head</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">19</span>&nbsp;<span style="color: blue;">&lt;</span><span style="color: maroon;">body&nbsp;</span><span style="color: red;">onload</span><span style="color: blue;">='dwr.util.useLoadingMessage()'&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">20</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">p</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">21</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">h2</span><span style="color: blue;">&gt;</span><span style="color: black;">Guice&nbsp;and&nbsp;DWR</span><span style="color: blue;">&lt;/</span><span style="color: maroon;">h2</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">22</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">input&nbsp;</span><span style="color: red;">class</span><span style="color: blue;">='button'&nbsp;</span><span style="color: red;">type</span><span style="color: blue;">='button'&nbsp;</span><span style="color: red;">value</span><span style="color: blue;">="Call&nbsp;HelloWorld&nbsp;'sayHello'&nbsp;service"</span><span style="color: red;">&nbsp;onclick</span><span style="color: blue;">="helloworld.sayHello(showHello)"</span>&nbsp;<span style="color: blue;">/&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">23</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">span&nbsp;</span><span style="color: red;">id</span><span style="color: blue;">='result'&nbsp;&gt;&lt;/</span><span style="color: maroon;">span</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">24</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;/</span><span style="color: maroon;">p</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">25</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">p</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">26</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">input&nbsp;</span><span style="color: red;">class</span><span style="color: blue;">='button'&nbsp;</span><span style="color: red;">type</span><span style="color: blue;">='button'&nbsp;</span><span style="color: red;">value</span><span style="color: blue;">="Call&nbsp;HelloWorld&nbsp;'getSystemDate'&nbsp;service"</span><span style="color: red;">&nbsp;onclick</span><span style="color: blue;">="helloworld.getSystemDate(getSystemDate)"</span>&nbsp;<span style="color: blue;">/&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">27</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;</span><span style="color: maroon;">span&nbsp;</span><span style="color: red;">id</span><span style="color: blue;">='systime'&nbsp;&gt;&lt;/</span><span style="color: maroon;">span</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">28</span>&nbsp;<span style="color: black;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: blue;">&lt;/</span><span style="color: maroon;">P</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">29</span>&nbsp;<span style="color: blue;">&lt;/</span><span style="color: maroon;">body</span><span style="color: blue;">&gt;</span><span style="color: black;"><br />
</span><span style="color: teal;">30</span>&nbsp;<span style="color: blue;">&lt;/</span><span style="color: maroon;">html</span><span style="color: blue;">&gt;</span></span></p>
<p style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: 宋体;">我们通过两个按钮来获取我们的远程调用的结果。</span></p>
<img src ="http://www.blogjava.net/shiwenfeng/aggbug/308483.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/shiwenfeng/" target="_blank">shiwf</a> 2010-01-06 18:46 <a href="http://www.blogjava.net/shiwenfeng/archive/2010/01/06/308483.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>guice和spring的整合</title><link>http://www.blogjava.net/shiwenfeng/archive/2010/01/06/308459.html</link><dc:creator>shiwf</dc:creator><author>shiwf</author><pubDate>Wed, 06 Jan 2010 08:39:00 GMT</pubDate><guid>http://www.blogjava.net/shiwenfeng/archive/2010/01/06/308459.html</guid><wfw:comment>http://www.blogjava.net/shiwenfeng/comments/308459.html</wfw:comment><comments>http://www.blogjava.net/shiwenfeng/archive/2010/01/06/308459.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/shiwenfeng/comments/commentRss/308459.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/shiwenfeng/services/trackbacks/308459.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Guice真的无法享受企业级组件吗，JavaEye里炮轰Guice的占绝大多数。但如果Guice能整合Spring，那么我们似乎可以做很多有意义的事了。那么开始Spring整合之旅吧。不过crazybob在整合方面极不配合，就给了我们一个单元测试类，然后让我们自力更生。好在Guice本身足够简单。&nbsp;首先还是来一个最简单无聊的HelloWorld整合吧。&nbsp;Hell...&nbsp;&nbsp;<a href='http://www.blogjava.net/shiwenfeng/archive/2010/01/06/308459.html'>阅读全文</a><img src ="http://www.blogjava.net/shiwenfeng/aggbug/308459.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/shiwenfeng/" target="_blank">shiwf</a> 2010-01-06 16:39 <a href="http://www.blogjava.net/shiwenfeng/archive/2010/01/06/308459.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>guice和struts2的整合</title><link>http://www.blogjava.net/shiwenfeng/archive/2010/01/06/308455.html</link><dc:creator>shiwf</dc:creator><author>shiwf</author><pubDate>Wed, 06 Jan 2010 08:16:00 GMT</pubDate><guid>http://www.blogjava.net/shiwenfeng/archive/2010/01/06/308455.html</guid><wfw:comment>http://www.blogjava.net/shiwenfeng/comments/308455.html</wfw:comment><comments>http://www.blogjava.net/shiwenfeng/archive/2010/01/06/308455.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/shiwenfeng/comments/commentRss/308455.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/shiwenfeng/services/trackbacks/308455.html</trackback:ping><description><![CDATA[<div class="blog_content" style="font-size: 10pt">
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: small"><span><span style="font-family: Times New Roman"><span class="hilite1">Guice</span></span></span><span>可真轻啊，所需的</span><span><span style="font-family: Times New Roman">3</span></span><span>个</span><span><span style="font-family: Times New Roman">Jar</span></span><span>包才不到</span><span><span style="font-family: Times New Roman">600k</span></span><span>。但缺点就是必须</span><span><span style="font-family: Times New Roman">JDK1.5</span></span><span>以上，像我们公司有几十个大大小小的</span><span><span style="font-family: Times New Roman">Java</span></span><span>项目，没有一个是</span><span><span style="font-family: Times New Roman">1.5</span></span><span>的，有点感慨啊。废话少说</span></span></p>
<span><span style="font-size: small; font-family: Times New Roman">&nbsp;</span></span><span style="font-size: small"><span>先建立一个</span><span><span style="font-family: Times New Roman">service：</span></span></span>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="font-size: small; font-family: Times New Roman"><span>IHelloService.java</span></span></p>
<span style="font-size: small; font-family: Times New Roman"><span>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://superleo.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" type="application/x-shockwave-flash" allowscriptaccess="always" quality="high" flashvars="clipboard=package%20com.leo.service%3B%0A%0Aimport%20com.google.inject.ImplementedBy%3B%0Aimport%20com.leo.service.impl.HelloServiceImpl%3B%0A%0A%2F*%0A%20*%20%E9%87%87%E7%94%A8annotation%E8%BF%9B%E8%A1%8C%E6%8E%A5%E5%8F%A3%E4%B8%8E%E5%AE%9E%E7%8E%B0%E7%B1%BB%E4%B9%8B%E9%97%B4%E7%9A%84%E7%BB%91%E5%AE%9A%0A%20*%20%E6%B3%A8%E6%84%8F%EF%BC%9A%E6%8E%A5%E5%8F%A3%E4%B8%8E%E5%AE%9E%E7%8E%B0%E7%B1%BB%E4%B9%8B%E9%97%B4%E7%BB%91%E5%AE%9A%E6%98%AF%E5%BF%85%E9%A1%BB%E7%9A%84%EF%BC%8C%E5%A6%82%E6%9E%9C%E5%8F%AA%E6%98%AF%E5%8D%95%E7%8B%AC%E4%B8%80%E4%B8%AA%E7%B1%BB%EF%BC%8C%E6%B2%A1%E6%9C%89%E6%8E%A5%E5%8F%A3%EF%BC%8C%0A%20*%20%E9%82%A3%E4%B9%88Guice%E4%BC%9A%E9%9A%90%E5%BC%8F%E7%9A%84%E8%87%AA%E5%8A%A8%E5%B8%AE%E4%BD%A0%E6%B3%A8%E5%85%A5%E3%80%82%E5%B9%B6%E4%B8%94%E6%8E%A5%E5%8F%A3%E6%AD%A4%E6%98%AF%E4%B8%8D%E5%BA%94%E8%AF%A5%E5%A3%B0%E6%98%8E%E6%B3%A8%E5%85%A5%E5%9F%9F%E8%8C%83%E5%9B%B4%E7%9A%84%EF%BC%8C%0A%20*%20%E5%BA%94%E8%AF%A5%E5%9C%A8%E5%85%B6%E5%AE%9E%E7%8E%B0%E5%9C%B0%E6%96%B9%E5%A3%B0%E6%98%8E%0A%20*%0A%20*%2F%0A%40ImplementedBy(HelloServiceImpl.class)%0Apublic%20interface%20IHelloService%20%7B%0A%09public%20String%20sayHello(String%20str)%3B%0A%7D%0A" lk_mediaid="lk_juiceapp_mediaPopup_1262764068939" lk_media="yes"></div>
</div>
<ol class="dp-j">
    <li><span><span class="keyword">package</span><span>&nbsp;com.leo.service;&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span><span class="keyword">import</span><span>&nbsp;com.google.inject.ImplementedBy;&nbsp;&nbsp;</span></span>
    <li><span><span class="keyword">import</span><span>&nbsp;com.leo.service.impl.HelloServiceImpl;&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span><span class="comment">/*</span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;*&nbsp;采用annotation进行接口与实现类之间的绑定</span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;*&nbsp;注意：接口与实现类之间绑定是必须的，如果只是单独一个类，没有接口，</span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;*&nbsp;那么<span class="hilite1">Guice</span>会隐式的自动帮你注入。并且接口此是不应该声明注入域范围的，</span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;*&nbsp;应该在其实现地方声明</span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;*</span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span>
    <li><span><span class="annotation">@ImplementedBy</span><span>(HelloServiceImpl.</span><span class="keyword">class</span><span>)&nbsp;&nbsp;</span></span>
    <li><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">interface</span><span>&nbsp;IHelloService&nbsp;{&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;String&nbsp;sayHello(String&nbsp;str);&nbsp;&nbsp;</span></span>
    <li><span>}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="java" style="display: none" name="code">package com.leo.service;
import com.google.inject.ImplementedBy;
import com.leo.service.impl.HelloServiceImpl;
/*
* 采用annotation进行接口与实现类之间的绑定
* 注意：接口与实现类之间绑定是必须的，如果只是单独一个类，没有接口，
* 那么<span class="hilite1">Guice</span>会隐式的自动帮你注入。并且接口此是不应该声明注入域范围的，
* 应该在其实现地方声明
*
*/
@ImplementedBy(HelloServiceImpl.class)
public interface IHelloService {
public String sayHello(String str);
}
</pre>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">再来一个简单的实现：</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">HelloServiceImpl.java</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://superleo.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" type="application/x-shockwave-flash" allowscriptaccess="always" quality="high" flashvars="clipboard=package%20com.leo.service.impl%3B%0A%0Aimport%20com.google.inject.Singleton%3B%0Aimport%20com.leo.service.IHelloService%3B%0A%0A%2F*%0A%20*%20%E8%BF%99%E9%87%8C%E5%A6%82%E6%9E%9C%E9%BB%98%E8%AE%A4%E4%B8%8D%E7%94%A8annotation%E6%A0%87%E6%B3%A8%E5%85%B6%E4%BD%9C%E7%94%A8%E5%9F%9F%EF%BC%8C%E6%88%96%E5%9C%A8%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9A%84module%E4%B9%9F%E4%B8%8D%E6%8C%87%E5%AE%9A%E7%9A%84%E8%AF%9D%0A%20*%20%E9%BB%98%E8%AE%A4%E7%9A%84%E5%88%9B%E5%BB%BA%E5%AF%B9%E8%B1%A1%E7%9A%84%E6%96%B9%E5%BC%8F%E6%98%AF%E7%B1%BB%E4%BC%BC%E4%BA%8ESpring%E7%9A%84prototype%EF%BC%8C%E5%9C%A8%E6%AD%A4%E5%A4%84%E5%9B%A0%E4%B8%BA%E4%BB%85%E4%BB%85%E6%98%AF%E4%B8%80%E4%B8%AAstateless%20service%0A%20*%20%E6%88%91%E4%BB%AC%E7%94%A8%40Singleton%E6%9D%A5%E6%A0%87%E6%B3%A8%E5%AE%83%EF%BC%8C%E6%9B%B4%E5%A4%9A%E7%9A%84%E4%BD%9C%E7%94%A8%E5%9F%9F%E5%8F%AF%E7%9C%8BGuice%E6%96%87%E6%A1%A3%0A%20*%20%0A%20*%20%E6%B3%A8%E6%84%8F%EF%BC%9A%E4%B8%8E%E6%A0%87%E6%B3%A8%40Singleton%E7%AD%89%E6%95%88%E7%9A%84%E5%B7%A5%E4%BD%9C%E4%B9%9F%E5%8F%AF%E4%BB%A5%E5%9C%A8%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9A%84module%E9%87%8C%E6%9D%A5%E5%AE%9E%E7%8E%B0%0A%20*%2F%0A%0A%40Singleton%0Apublic%20class%20HelloServiceImpl%20implements%20IHelloService%20%7B%0A%0A%09public%20String%20sayHello(String%20str)%20%7B%0A%09%09return%20new%20StringBuilder(%22Hello%20%22%20%2B%20str%20%2B%20%22%20!%22).toString()%3B%0A%09%7D%0A%0A%7D%0A" lk_mediaid="lk_juiceapp_mediaPopup_1262764068952" lk_media="yes"></div>
</div>
<ol class="dp-j">
    <li><span><span class="keyword">package</span><span>&nbsp;com.leo.service.impl;&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span><span class="keyword">import</span><span>&nbsp;com.google.inject.Singleton;&nbsp;&nbsp;</span></span>
    <li><span><span class="keyword">import</span><span>&nbsp;com.leo.service.IHelloService;&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span><span class="comment">/*</span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;*&nbsp;这里如果默认不用annotation标注其作用域，或在自定义的module也不指定的话</span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;*&nbsp;默认的创建对象的方式是类似于Spring的prototype，在此处因为仅仅是一个stateless&nbsp;service</span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;*&nbsp;我们用@Singleton来标注它，更多的作用域可看<span class="hilite1">Guice</span>文档</span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;*&nbsp;</span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;*&nbsp;注意：与标注@Singleton等效的工作也可以在自定义的module里来实现</span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span><span class="annotation">@Singleton</span><span>&nbsp;&nbsp;</span></span>
    <li><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;HelloServiceImpl&nbsp;</span><span class="keyword">implements</span><span>&nbsp;IHelloService&nbsp;{&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;String&nbsp;sayHello(String&nbsp;str)&nbsp;{&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;StringBuilder(</span><span class="string">"Hello&nbsp;"</span><span>&nbsp;+&nbsp;str&nbsp;+&nbsp;</span><span class="string">"&nbsp;!"</span><span>).toString();&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="java" style="display: none" name="code">package com.leo.service.impl;
import com.google.inject.Singleton;
import com.leo.service.IHelloService;
/*
* 这里如果默认不用annotation标注其作用域，或在自定义的module也不指定的话
* 默认的创建对象的方式是类似于Spring的prototype，在此处因为仅仅是一个stateless service
* 我们用@Singleton来标注它，更多的作用域可看<span class="hilite1">Guice</span>文档
*
* 注意：与标注@Singleton等效的工作也可以在自定义的module里来实现
*/
@Singleton
public class HelloServiceImpl implements IHelloService {
public String sayHello(String str) {
return new StringBuilder("Hello " + str + " !").toString();
}
}
</pre>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span class="hilite2">Struts2</span>的配置相信大家都会了，这里需要注意的是<span class="hilite2">Struts2</span>的工厂已经变了，默认是Spring现在我们要改成<span class="hilite1">Guice</span>，请看：</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">struts.properties</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://superleo.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" type="application/x-shockwave-flash" allowscriptaccess="always" quality="high" flashvars="clipboard=struts.objectFactory%20%3D%20guice%0A%23%E5%A6%82%E6%9E%9C%E8%87%AA%E5%B7%B2%E6%83%B3%E5%AE%9E%E7%8E%B0Module%E6%8E%A5%E5%8F%A3%EF%BC%8C%E5%88%99%E4%B8%8B%E9%9D%A2%E6%B3%A8%E9%87%8A%E8%AF%B7%E5%8E%BB%E6%8E%89%0A%23guice.module%3Dcom.leo.module.MyModule%0Astruts.action.extension%3D%0A" lk_mediaid="lk_juiceapp_mediaPopup_1262764068955" lk_media="yes"></div>
</div>
<ol class="dp-j">
    <li><span><span>struts.objectFactory&nbsp;=&nbsp;<span class="hilite1">guice</span>&nbsp;&nbsp;</span></span>
    <li><span>#如果自已想实现Module接口，则下面注释请去掉&nbsp;&nbsp;</span>
    <li><span>#<span class="hilite1">guice</span>.module=com.leo.module.MyModule&nbsp;&nbsp;</span>
    <li><span>struts.action.extension=&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="java" style="display: none" name="code">struts.objectFactory = <span class="hilite1">guice</span>
#如果自已想实现Module接口，则下面注释请去掉
#<span class="hilite1">guice</span>.module=com.leo.module.MyModule
struts.action.extension=
</pre>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">再来看看调用代码，稍微比Spring简洁了些：</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">HelloAction.java</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://superleo.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" type="application/x-shockwave-flash" allowscriptaccess="always" quality="high" flashvars="clipboard=package%20com.leo.action%3B%0A%0Aimport%20com.google.inject.Inject%3B%0Aimport%20com.leo.service.IHelloService%3B%0Aimport%20com.opensymphony.xwork2.ActionSupport%3B%0A%0Apublic%20class%20HelloAction%20extends%20ActionSupport%20%7B%0A%0A%09private%20static%20final%20long%20serialVersionUID%20%3D%20-338076402728419581L%3B%0A%0A%09%2F*%0A%09%20*%20%E9%80%9A%E8%BF%87field%E5%AD%97%E6%AE%B5%E8%BF%9B%E8%A1%8C%E6%B3%A8%E5%85%A5%EF%BC%8C%E9%99%A4%E6%AD%A4%E4%B9%8B%E5%A4%96%EF%BC%8C%E8%BF%98%E6%9C%89construct%2C%20method%E6%B3%A8%E5%85%A5%E5%9D%87%E5%8F%AF%0A%09%20*%2F%0A%09%40Inject%0A%09private%20IHelloService%20helloService%3B%0A%0A%09private%20String%20message%3B%0A%0A%09public%20String%20getMessage()%20%7B%0A%09%09return%20message%3B%0A%09%7D%0A%0A%09public%20void%20setMessage(String%20message)%20%7B%0A%09%09this.message%20%3D%20message%3B%0A%09%7D%0A%0A%09public%20String%20execute()%20%7B%0A%09%09message%20%3D%20helloService.sayHello(%22leo%22)%3B%0A%09%09return%20SUCCESS%3B%0A%09%7D%0A%0A%7D%0A" lk_mediaid="lk_juiceapp_mediaPopup_1262764068957" lk_media="yes"></div>
</div>
<ol class="dp-j">
    <li><span><span class="keyword">package</span><span>&nbsp;com.leo.action;&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span><span class="keyword">import</span><span>&nbsp;com.google.inject.Inject;&nbsp;&nbsp;</span></span>
    <li><span><span class="keyword">import</span><span>&nbsp;com.leo.service.IHelloService;&nbsp;&nbsp;</span></span>
    <li><span><span class="keyword">import</span><span>&nbsp;com.opensymphony.xwork2.ActionSupport;&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;HelloAction&nbsp;</span><span class="keyword">extends</span><span>&nbsp;ActionSupport&nbsp;{&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">long</span><span>&nbsp;serialVersionUID&nbsp;=&nbsp;-338076402728419581L;&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/*</span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;通过field字段进行注入，除此之外，还有construct,&nbsp;method注入均可</span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@Inject</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;IHelloService&nbsp;helloService;&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;String&nbsp;message;&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;String&nbsp;getMessage()&nbsp;{&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;message;&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;setMessage(String&nbsp;message)&nbsp;{&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">this</span><span>.message&nbsp;=&nbsp;message;&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;String&nbsp;execute()&nbsp;{&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;=&nbsp;helloService.sayHello(<span class="string">"leo"</span><span>);&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;SUCCESS;&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="java" style="display: none" name="code">package com.leo.action;
import com.google.inject.Inject;
import com.leo.service.IHelloService;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport {
private static final long serialVersionUID = -338076402728419581L;
/*
* 通过field字段进行注入，除此之外，还有construct, method注入均可
*/
@Inject
private IHelloService helloService;
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String execute() {
message = helloService.sayHello("leo");
return SUCCESS;
}
}
</pre>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p>&nbsp;</p>
<p>struts.xml配置也是非常简单：</p>
<p>&nbsp;</p>
<p>struts.xml</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Xml代码 <embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://superleo.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" type="application/x-shockwave-flash" allowscriptaccess="always" quality="high" flashvars="clipboard=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20%3F%3E%0A%3C!DOCTYPE%20struts%20PUBLIC%0A%20%20%20%20%22-%2F%2FApache%20Software%20Foundation%2F%2FDTD%20Struts%20Configuration%202.0%2F%2FEN%22%0A%20%20%20%20%22http%3A%2F%2Fstruts.apache.org%2Fdtds%2Fstruts-2.0.dtd%22%3E%0A%0A%3Cstruts%3E%0A%09%3Cpackage%20name%3D%22default%22%20extends%3D%22struts-default%22%3E%0A%09%09%3Caction%20name%3D%22hello%22%20class%3D%22com.leo.action.HelloAction%22%3E%0A%09%09%09%3Cresult%3Eindex.jsp%3C%2Fresult%3E%0A%09%09%3C%2Faction%3E%0A%09%3C%2Fpackage%3E%0A%3C%2Fstruts%3E%0A" lk_mediaid="lk_juiceapp_mediaPopup_1262764068959" lk_media="yes"></div>
</div>
<ol class="dp-xml">
    <li><span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span>&nbsp;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&lt;!DOCTYPE&nbsp;struts&nbsp;PUBLIC&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;"-//Apache&nbsp;Software&nbsp;Foundation//DTD&nbsp;Struts&nbsp;Configuration&nbsp;2.0//EN"&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;"http://struts.apache.org/dtds/struts-2.0.dtd"<span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span><span class="tag">&lt;</span><span class="tag-name">struts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">package</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"default"</span><span>&nbsp;</span><span class="attribute">extends</span><span>=</span><span class="attribute-value">"struts-default"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">action</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"hello"</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">"com.leo.action.HelloAction"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">result</span><span class="tag">&gt;</span><span>index.jsp</span><span class="tag">&lt;/</span><span class="tag-name">result</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">action</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">package</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span><span class="tag">&lt;/</span><span class="tag-name">struts</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="xml" style="display: none" name="code">&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"&gt;
&lt;struts&gt;
&lt;package name="default" extends="struts-default"&gt;
&lt;action name="hello" class="com.leo.action.HelloAction"&gt;
&lt;result&gt;index.jsp&lt;/result&gt;
&lt;/action&gt;
&lt;/package&gt;
&lt;/struts&gt;
</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>到这里，算是大功告成了，<span class="hilite1">Guice</span>文档在与<span class="hilite2">Struts2</span>整合部分例子有误，而且郁闷的是，竟然连<span class="hilite1">Guice</span>的Filter需要在web.xml配置都没有说，我把配好的web.xml弄出来给大家看看</p>
<p>&nbsp;</p>
<p>web.xml</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Xml代码 <embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://superleo.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" type="application/x-shockwave-flash" allowscriptaccess="always" quality="high" flashvars="clipboard=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Cweb-app%20version%3D%222.4%22%20xmlns%3D%22http%3A%2F%2Fjava.sun.com%2Fxml%2Fns%2Fj2ee%22%0A%09xmlns%3Axsi%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema-instance%22%0A%09xsi%3AschemaLocation%3D%22http%3A%2F%2Fjava.sun.com%2Fxml%2Fns%2Fj2ee%20%0A%09http%3A%2F%2Fjava.sun.com%2Fxml%2Fns%2Fj2ee%2Fweb-app_2_4.xsd%22%3E%0A%0A%09%3Cfilter%3E%0A%09%09%3Cfilter-name%3Eguice%3C%2Ffilter-name%3E%0A%09%09%3Cfilter-class%3E%0A%09%09%09com.google.inject.servlet.GuiceFilter%0A%09%09%3C%2Ffilter-class%3E%0A%09%3C%2Ffilter%3E%0A%0A%09%3Cfilter%3E%0A%09%09%3Cfilter-name%3Estruts%3C%2Ffilter-name%3E%0A%09%09%3Cfilter-class%3E%0A%09%09%09org.apache.struts2.dispatcher.FilterDispatcher%0A%09%09%3C%2Ffilter-class%3E%0A%09%3C%2Ffilter%3E%0A%0A%09%3Cfilter-mapping%3E%0A%09%09%3Cfilter-name%3Eguice%3C%2Ffilter-name%3E%0A%09%09%3Curl-pattern%3E%2F*%3C%2Furl-pattern%3E%0A%09%3C%2Ffilter-mapping%3E%0A%0A%09%3Cfilter-mapping%3E%0A%09%09%3Cfilter-name%3Estruts%3C%2Ffilter-name%3E%0A%09%09%3Curl-pattern%3E%2F*%3C%2Furl-pattern%3E%0A%09%3C%2Ffilter-mapping%3E%0A%0A%09%3Cwelcome-file-list%3E%0A%09%09%3Cwelcome-file%3Eindex.jsp%3C%2Fwelcome-file%3E%0A%09%3C%2Fwelcome-file-list%3E%0A%3C%2Fweb-app%3E%0A" lk_mediaid="lk_juiceapp_mediaPopup_1262764068961" lk_media="yes"></div>
</div>
<ol class="dp-xml">
    <li><span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"1.0"</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span><span class="tag">&lt;</span><span class="tag-name">web-app</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">"2.4"</span><span>&nbsp;</span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">"http://java.sun.com/xml/ns/j2ee"</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">xmlns:xsi</span><span>=</span><span class="attribute-value">"http://www.w3.org/2001/XMLSchema-instance"</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">xsi:schemaLocation</span><span>="http://java.sun.com/xml/ns/j2ee&nbsp;&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"<span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span><span class="hilite1">guice</span></span><span class="tag">&lt;/</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com.google.inject.servlet.GuiceFilter&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">filter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>struts</span><span class="tag">&lt;/</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.<span class="hilite2">struts2</span>.dispatcher.FilterDispatcher&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">filter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span><span class="hilite1">guice</span></span><span class="tag">&lt;/</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>/*</span><span class="tag">&lt;/</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">filter-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>struts</span><span class="tag">&lt;/</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>/*</span><span class="tag">&lt;/</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">filter-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">welcome-file-list</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;</span><span class="tag-name">welcome-file</span><span class="tag">&gt;</span><span>index.jsp</span><span class="tag">&lt;/</span><span class="tag-name">welcome-file</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="tag">&lt;/</span><span class="tag-name">welcome-file-list</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li><span><span class="tag">&lt;/</span><span class="tag-name">web-app</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="xml" style="display: none" name="code">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&gt;
&lt;filter&gt;
&lt;filter-name&gt;<span class="hilite1">guice</span>&lt;/filter-name&gt;
&lt;filter-class&gt;
com.google.inject.servlet.GuiceFilter
&lt;/filter-class&gt;
&lt;/filter&gt;
&lt;filter&gt;
&lt;filter-name&gt;struts&lt;/filter-name&gt;
&lt;filter-class&gt;
org.apache.<span class="hilite2">struts2</span>.dispatcher.FilterDispatcher
&lt;/filter-class&gt;
&lt;/filter&gt;
&lt;filter-mapping&gt;
&lt;filter-name&gt;<span class="hilite1">guice</span>&lt;/filter-name&gt;
&lt;url-pattern&gt;/*&lt;/url-pattern&gt;
&lt;/filter-mapping&gt;
&lt;filter-mapping&gt;
&lt;filter-name&gt;struts&lt;/filter-name&gt;
&lt;url-pattern&gt;/*&lt;/url-pattern&gt;
&lt;/filter-mapping&gt;
&lt;welcome-file-list&gt;
&lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;
&lt;/welcome-file-list&gt;
&lt;/web-app&gt;
</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">可以布署，运行了，输入<a href="http://localhost:8080/struts2_guice/hello">http://localhost:8080/struts2_guice/hello</a> 就可以看到结果了。</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">如果你觉得Annotation太麻烦，或不喜欢，也可以尝试自己实现<span class="hilite1">Guice</span>的Module，以下是一个简单的实现：</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">MyModule.java</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <embed pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://superleo.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" width="14" height="15" type="application/x-shockwave-flash" allowscriptaccess="always" quality="high" flashvars="clipboard=package%20com.leo.module%3B%0A%0Aimport%20com.google.inject.Binder%3B%0Aimport%20com.google.inject.Module%3B%0Aimport%20com.google.inject.Scopes%3B%0Aimport%20com.leo.service.IHelloService%3B%0Aimport%20com.leo.service.impl.HelloServiceImpl%3B%0A%0A%2F*%0A%20*%20%E5%A6%82%E6%9E%9C%E4%BD%A0%E8%A7%89%E5%BE%97Annotation%E6%9C%89%E7%A7%8D%E6%94%AF%E7%A6%BB%E7%A0%B4%E7%A2%8E%E7%9A%84%E6%84%9F%E8%A7%89%EF%BC%8C%E5%88%AB%E6%80%A5%EF%BC%8CGuice%E8%BF%98%E4%B8%BA%E4%BD%A0%E6%8F%90%E4%BE%9B%E4%B8%80%E7%A7%8D%E7%BB%9F%E4%B8%80%0A%20*%20%E6%B3%A8%E5%85%A5%E7%AE%A1%E7%90%86%E7%9A%84%E8%87%AA%E5%AE%9A%E4%B9%89%E5%AE%9E%E7%8E%B0%E3%80%82%E5%9C%A8%E6%9C%AC%E4%BE%8B%E4%B8%AD%EF%BC%8C%E5%85%88%E5%89%8D%E7%9A%84IHelloService%2C%20HelloServiceImpl%0A%20*%20%E4%BD%A0%E7%8E%B0%E5%9C%A8%E5%8F%AF%E4%BB%A5%E5%AE%8C%E5%85%A8%E5%B0%86%E6%89%80%E6%9C%89%E7%9A%84Annotation%E5%8E%BB%E6%8E%89%EF%BC%8C%E7%84%B6%E5%90%8E%E5%AE%9E%E7%8E%B0Module%E6%8E%A5%E5%8F%A3%E7%9A%84%E5%94%AF%E4%B8%80%E4%B8%80%E4%B8%AA%E6%96%B9%E6%B3%95%0A%20*%20%E5%AE%9E%E7%8E%B0%E5%A6%82%E4%B8%8B%0A%20*%2F%0Apublic%20class%20MyModule%20implements%20Module%20%7B%0A%0A%09public%20void%20configure(Binder%20binder)%20%7B%0A%0A%09%09%2F*%0A%09%09%20*%20%E5%B0%86%E6%8E%A5%E5%8F%A3IHelloService%20%E4%B8%8E%E5%85%B6%E5%AE%9E%E7%8E%B0HelloServiceImpl%20%E7%BB%91%E5%AE%9A%E5%9C%A8%E4%B8%80%E8%B5%B7%20%E5%B9%B6%E4%B8%94%E4%BD%9C%E7%94%A8%E5%9F%9F%E4%B8%BAScopes.SINGLETON%0A%09%09%20*%20%E5%9C%A8%E8%BF%99%E9%87%8C%E6%9C%89%E5%A4%9A%E7%A7%8D%E9%85%8D%E7%BD%AE%E6%96%B9%E6%B3%95%EF%BC%8C%E4%BD%86%E5%9B%A0%E4%B8%BA%E6%98%AF%E5%85%A5%E9%97%A8%E5%AE%9E%E4%BE%8B%EF%BC%8C%E4%B8%8D%E6%83%B3%E8%AF%B4%E7%9A%84%E5%A4%AA%E5%A4%8D%E6%9D%82%E3%80%82%E5%85%B6%E4%B8%AD%E5%A6%82%E6%9E%9C%E4%B8%8D%E9%85%8D%E7%BD%AE%E4%BD%9C%E7%94%A8%E5%9F%9F%EF%BC%8C%E9%BB%98%E8%AE%A4%E5%B0%B1%E6%98%AF%E7%B1%BB%E4%BC%BC%E4%BA%8ESpring%0A%09%09%20*%20%E7%9A%84Scope%3D%22prototype%22%0A%09%09%20*%2F%0A%09%09binder.bind(IHelloService.class).to(HelloServiceImpl.class).in(%0A%09%09%09%09Scopes.SINGLETON)%3B%0A%09%7D%0A%0A%7D%0A" lk_mediaid="lk_juiceapp_mediaPopup_1262764068968" lk_media="yes"></div>
</div>
<ol class="dp-j">
    <li><span><span class="keyword">package</span><span>&nbsp;com.leo.module;&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span><span class="keyword">import</span><span>&nbsp;com.google.inject.Binder;&nbsp;&nbsp;</span></span>
    <li><span><span class="keyword">import</span><span>&nbsp;com.google.inject.Module;&nbsp;&nbsp;</span></span>
    <li><span><span class="keyword">import</span><span>&nbsp;com.google.inject.Scopes;&nbsp;&nbsp;</span></span>
    <li><span><span class="keyword">import</span><span>&nbsp;com.leo.service.IHelloService;&nbsp;&nbsp;</span></span>
    <li><span><span class="keyword">import</span><span>&nbsp;com.leo.service.impl.HelloServiceImpl;&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span><span class="comment">/*</span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;*&nbsp;如果你觉得Annotation有种支离破碎的感觉，别急，<span class="hilite1">Guice</span>还为你提供一种统一</span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;*&nbsp;注入管理的自定义实现。在本例中，先前的IHelloService,&nbsp;HelloServiceImpl</span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;*&nbsp;你现在可以完全将所有的Annotation去掉，然后实现Module接口的唯一一个方法</span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;*&nbsp;实现如下</span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;*/</span><span>&nbsp;&nbsp;</span></span>
    <li><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;MyModule&nbsp;</span><span class="keyword">implements</span><span>&nbsp;Module&nbsp;{&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;configure(Binder&nbsp;binder)&nbsp;{&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/*</span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;将接口IHelloService&nbsp;与其实现HelloServiceImpl&nbsp;绑定在一起&nbsp;并且作用域为Scopes.SINGLETON</span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;在这里有多种配置方法，但因为是入门实例，不想说的太复杂。其中如果不配置作用域，默认就是类似于Spring</span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;的Scope="prototype"</span>&nbsp;</span>
    <li><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;binder.bind(IHelloService.<span class="keyword">class</span><span>).to(HelloServiceImpl.</span><span class="keyword">class</span><span>).in(&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scopes.SINGLETON);&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="java" style="display: none" name="code">package com.leo.module;
import com.google.inject.Binder;
import com.google.inject.Module;
import com.google.inject.Scopes;
import com.leo.service.IHelloService;
import com.leo.service.impl.HelloServiceImpl;
/*
* 如果你觉得Annotation有种支离破碎的感觉，别急，<span class="hilite1">Guice</span>还为你提供一种统一
* 注入管理的自定义实现。在本例中，先前的IHelloService, HelloServiceImpl
* 你现在可以完全将所有的Annotation去掉，然后实现Module接口的唯一一个方法
* 实现如下
*/
public class MyModule implements Module {
public void configure(Binder binder) {
/*
* 将接口IHelloService 与其实现HelloServiceImpl 绑定在一起 并且作用域为Scopes.SINGLETON
* 在这里有多种配置方法，但因为是入门实例，不想说的太复杂。其中如果不配置作用域，默认就是类似于Spring
* 的Scope="prototype"
*/
binder.bind(IHelloService.class).to(HelloServiceImpl.class).in(
Scopes.SINGLETON);
}
}
</pre>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">运行效果完全一模一样，因此团队开发如果统一风格的话<span class="hilite1">Guice</span>确实能快速不少。但目前<span class="hilite1">Guice</span>仅仅只是一个IoC，远远没有Spring所涉及的那么广，但又正如Rod Johnson反复在其《J2EE without EJB》里强调：架构要永远 simplest, simplest 再 simplest，因此你觉得够用，就是最好的。<br />
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">总的来说，开发，运行的速度似乎又快了不少，但<span class="hilite1">Guice</span>真的能不能扛起其所说的下一代IoC容器，我们拭目以待吧。</p>
<br />
</span></span></div>
<img src ="http://www.blogjava.net/shiwenfeng/aggbug/308455.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/shiwenfeng/" target="_blank">shiwf</a> 2010-01-06 16:16 <a href="http://www.blogjava.net/shiwenfeng/archive/2010/01/06/308455.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>