如何将 Guice 2 集成到 Wicket 中?

发布于 2024-09-04 08:29:45 字数 367 浏览 10 评论 0原文

我想将 Guice 2 与 Wicket 1.4 一起使用。有一个“wicket-guice”包,它使用 Guice 1。有人能给我一个示例,说明如何配置 Wicket 以使用 Guice 2 进行注入(使用 Maven)。

正如你所看到的,我找到了一个解决方案,但我想知道,使用 Guice Servlet 并使用 Guice 将整个 Wicket 应用程序注册为 ServletFilter。但我认为这会与检票口对象创建策略相冲突。

I want to use Guice 2 with Wicket 1.4. There is a "wicket-guice" package, which uses Guice 1. Can someone give me an example how to configure Wicket to use Guice 2 for injection (with Maven).

As you can see blow, I've found a solution, but I wonder, if it would be better to use Guice Servlets and register the whole Wicket Application as a ServletFilter with Guice. But I think this would conflict with wickets object creation strategy.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

新雨望断虹 2024-09-11 08:29:45

为了回答自己,我发布了解决方案,这是我在 AtomicGamer 开发博客

由于 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));    
    }

}

To answer myself I post the solution, which I found with the help of AtomicGamer Dev Blog.

Since wicket-guice supports only Guice 1, Guice needs to be excluded from the wicket-guice extension.

<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>

The actual integrations happens in the init method, which calls the addComponentInstantiationListener method.

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));    
    }

}
峩卟喜欢 2024-09-11 08:29:45

我已经成功实现了一个解决方案,其中 wicket 的配置和启动完全使用 Guice 的 ServletModule 用 java 代码编写 - 根本没有用于 wicket 的 xml。

所有详细信息均在此处进行了描述 在我写的一篇博客文章中。

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

我想您会发现再次忘记 web.xml 维护是件好事:)

I have successfully implemented a solution where wicket's configuration and startup are written purely in java code using Guice's ServletModule - no xml used for wicket at all.

All the details are described here in a blog post I've written.

Full source (zip/svn) and a working example eclipse project are available for download as well (links are at the end of the post).

I think you'll find it great to once again forget about web.xml maintenance :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文