Guice作为一个新的IoC框架,在文档等方面并没有太多优势,但有一个非常好的邮件列表可以弥补。因为Slackiss使用的是Guice作为IoC框架,使用的Struts2作为表现层的页面控制,因此必然需要将Struts2与Guice整合在一起。在整合的时候,花了不少时间,也浪费了不少时间,在这里记一下如何整合。其实流程还是很简单的,只不过是一些细节可能会注意不到。
又想起李义勇老师的一句话:计算机这东西,会的人感觉啥都不难,不会的人,看起来就是天书。
我的整合是这么做的:
1.把Struts2的例子程序打开,有一个struts-blank,用它作为Struts2的基础。
2.在不添加Guice的情况下,调试一个基础的Helloworld程序出来。
3.添加Guice1.0里面的一个Jar包,叫做Guice-1.0.jar。
4.从Guice官网下载guice-struts2-plugin-1.0.1.jar
添加guice-servlet-1.0.jar,Guice-struts2-plugin-1.0.1.jar和Guice-1.0.jar到Classpath中。
5.在这个地方要注意的是,不要使用Guice1.0自带的那个guice-struts2-plugin-1.0.jar的包,否则,你依然可以运行基础的Struts2的功能,但如果想集成Dao或者使用Provider等功能,则无论是功能还是性能都不会让你好受。
6.配置web.xml,主要添加下面一些内容:
<!-- guice filter for struts2 plug-in--> <filter> <filter-name>guice</filter-name> <filter-class>com.google.inject.servlet.GuiceFilter</filter-class> </filter> <!-- struts2 filter --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <!-- filter mapping --> <filter-mapping> <filter-name>guice</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
似乎官方文档还没有说明这一点,因此也要注意。
7.配置Struts2,让Guice生成Action和拦截器
<constant name="struts.objectFactory" value="guice" />
8.这样应该就可以正常使用Guice与Struts2了。
在这里就不讨论整合后的所谓优点与缺点了,只是说明这样整合就可以正常使用。