Guice轻量且快速,不失为一款好的ioc框架,下面说说与Struts2的整合。
1. 依赖包
除了需要加入Struts2的依赖包外,需加上Guice的依赖包和Struts-guice-plugin.jar扩展包:
aopalliance.jar,guice-3.0.jar,guice-servlet-3.0.jar,guice-struts2-plugin-3.0.jar,javax.inject.jar。
2. web.xml配置
以.do为例
1>. 在web.xml里加入guicefilter
<filter> <filter-name>GuiceFilter</filter-name> <filter-class>com.google.inject.servlet.GuiceFilter</filter-class> </filter> <filter-mapping> <filter-name>GuiceFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping>
2>.struts.properties或struts.xml
struts.objectFactory=guice
或
<constant name="struts.objectFactory" value="guice"/>
3>. 创建一个Listener
代码如下:
public class GuiceListener extends GuiceServletContextListener {
public Injector getInjector() {
return Guice.createInjector(new Struts2GuicePluginModule(),
new ServletModule() {
protected void configureServlets() {
// Struts 2 setup
bind(StrutsPrepareAndExecuteFilter.class).in(
Singleton.class);
// 对 *.do
filter("*.do").through(StrutsPrepareAndExecuteFilter.class);
// Our app-specific code
// 可在UserService里用注解@ImplementedBy(UserServiceImpl.class)代替下一行
// bind(UserService.class).to(UserServiceImpl.class);
}
});
}
}
既可以在module里写定,也可以用注解来实现注入。
不用再配struts2的filter了。
然后在web.xml里配入这个listener
<listener>
<listener-class>com.demo.listener.GuiceListener</listener-class>
</listener>
在Action类里,
@Inject
private User user;
@Inject
private UserService userService;
即可完成注入。