我想在Wicket 1.4中使用Guice 2。有一个“wicket-guice”包,它使用Guice 1.有人可以举个例子来说明如何配置Wicket以使用Guice 2进行注射(使用Maven)。
正如你所看到的那样,我找到了一个解决方案,但我想知道,如果最好使用Guice Servlets并将整个Wicket应用程序注册为带有Guice的ServletFilter。但我认为这会与wickets对象创建策略发生冲突。
答案 0 :(得分:1)
为了回答问题,我发布了解决方案,我在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));
}
}
答案 1 :(得分:1)
我已成功实现了一个解决方案,其中wicket的配置和启动使用Guice的ServletModule完全用java代码编写 - 根本没有用于wicket的xml。
我写的博客文章中描述了所有细节here。
完整的源代码(zip / svn)和一个工作示例eclipse项目也可以下载(链接在帖子的末尾)。
我认为你会发现再次忘记web.xml维护很棒:)