如何将Guice 2整合到Wicket中?

时间:2010-06-04 08:31:38

标签: java maven-2 dependency-injection wicket guice

我想在Wicket 1.4中使用Guice 2。有一个“wicket-guice”包,它使用Guice 1.有人可以举个例子来说明如何配置Wicket以使用Guice 2进行注射(使用Maven)。

正如你所看到的那样,我找到了一个解决方案,但我想知道,如果最好使用Guice Servlets并将整个Wicket应用程序注册为带有Guice的ServletFilter。但我认为这会与wickets对象创建策略发生冲突。

2 个答案:

答案 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维护很棒:)