如何将Guice 2整合到Wicket中?

问题描述:

我想用Guice 2和Wicket 1.4。有一个“wicket-guice”包,它使用Guice 1.有人可以给我一个例子如何配置Wicket使用Guice 2进行注入(使用Maven)。如何将Guice 2整合到Wicket中?

正如你所看到的那样,我找到了一个解决方案,但是我想知道,如果使用Guice Servlets并将整个Wicket Application注册为ServletFilter和Guice,会更好。但我认为这会与小门对象创建策略相冲突。

为了回答我自己,我发布了解决方案,我在AtomicGamer Dev Blog的帮助下找到了解决方案。

由于wicket-guice只支持Guice 1,所以Guice需要从wicket-guice扩展中排除。

<dependencies> 
     <dependency> 
       <groupId>com.google.inject</groupId> 
       <artifactId>guice</artifactId> 
       <version>2.0</version> 
     </dependency> 
     <dependency> 
       <groupId>org.apache.wicket</groupId> 
       <artifactId>wicket-guice</artifactId> 
       <version>${wicket.version}</version> 
       <exclusions> 
         <exclusion> 
           <groupId>com.google.code.guice</groupId> 
           <artifactId>guice</artifactId> 
         </exclusion> 
       </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.wicket</groupId> 
      <artifactId>wicket</artifactId> 
      <version>${wicket.version}</version> 
     </dependency> 
<dependencies> 

实际的整合发生在init方法,它调用的方法addComponentInstantiationListener

import com.google.inject.Guice; 
import com.google.inject.Injector; 
import org.apache.wicket.Page; 
import org.apache.wicket.protocol.http.WebApplication; 
import org.apache.wicket.guice.GuiceComponentInjector; 

public class NavigatorApplication extends WebApplication { 

    @Override 
    public Class<? extends Page> getHomePage() { 
     return Startpage.class; 
    } 

    @Override 
    protected void init() { 
     super.init(); 
       Injector injector = Guice.createInjector(new WebAppModule()); 
       addComponentInstantiationListener(
           new GuiceComponentInjector(this, injector));  
    } 

} 

我已经成功实现,其中检票口的配置和启动使用Guice的servlet模块纯Java代码编写的一个解决方案 - 没有用于检票口在所有的XML。

所有的细节在我撰写的博客文章中被描述为here

完整源代码(zip/svn)和一个工作示例eclipse项目也可以下载(链接在帖子末尾)。

我想你会发现它很好,再次忘记web.xml的维护:)