Как заставить DI работать с Guice и Webapps? - PullRequest
0 голосов
/ 01 июля 2011

Как заставить DI работать в веб-приложении? До сих пор я сделал следующее:

1) Метод аннотирования с помощью @Inject

2) Расширить AbstractModule так, чтобы он связывал класс интерфейса с классом реализации для атрибута, установщик которого был аннотирован на шаге 1

3) Расширьте GuiceContextServletListener и переопределите getInjector, чтобы он возвратил Guice.createInjector(new ExtendedAbstractModule())

4) Зарегистрированный расширенный GuiceContextServletListener в web.xml в качестве слушателя

Я убедился, что расширенный метод GuiceContextServletListener.getInjector() вызывается при запуске веб-приложения. Атрибут, чей установщик был аннотирован, не внедряется и остается null.

Ответы [ 2 ]

0 голосов
/ 05 июля 2011

Я пошел дальше и создал ServletModule, который обслуживает сервлет, который создает объект с помощью установщика @Inject. После создания объекта я получаю Injector от ServletContext и вызываю метод injectMembers, передавая ему объект.

0 голосов
/ 02 июля 2011

Какую аннотацию вы используете на сеттере?

Обычно я использую аннотацию @Named для получения значений атрибутов, которые можно указать на файл свойств или настроить отдельно.

http://code.google.com/p/google-guice/wiki/BindingAnnotations

@ Inject

voidthingSetter (@Named ('Tag') String s) {

}

Здесь есть руководство по настройке полного веб-сервиса Java с использованием Guice и Sitebricks: http://www.techtraits.ca/five-minute-guide-to-setting-up-a-java-webserver/

...