Как интегрировать Guice 2 в Wicket? - PullRequest
0 голосов
/ 04 июня 2010

Я хочу использовать Guice 2 с Wicket 1.4. Существует пакет "wicket-guice", который использует Guice 1. Может ли кто-нибудь дать мне пример того, как настроить Wicket для использования Guice 2 для инъекций (с Maven).

Как видите, я нашел решение, но мне интересно, будет ли лучше использовать Сервлеты Guice и зарегистрировать все приложение Wicket как ServletFilter в Guice. Но я думаю, что это противоречило бы стратегии создания объекта калиток.

Ответы [ 2 ]

1 голос
/ 06 июня 2010

Я успешно реализовал решение, в котором конфигурация и запуск wicket написаны исключительно в java-коде с использованием ServletModule Guice - для wicket вообще не используется xml.

Все подробности описаны здесь в блоге, который я написал.

Полный исходный код (zip / svn) и рабочий пример проекта eclipse также доступны для скачивания (ссылки приведены в конце поста).

Думаю, вам будет приятно снова забыть о поддержке web.xml:)

1 голос
/ 04 июня 2010

Чтобы ответить себе, я публикую решение, которое я нашел с помощью 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));    
    }

}
...