Получить Guice Injector в веб-приложении - PullRequest
5 голосов
/ 04 апреля 2011

Я смотрю, как я могу получить Инжектор, используя Guice в веб-приложении. Я уже нашел решение с использованием ServletContext, но я не очень удовлетворен этим решением, потому что оно нарушает архитектуру уровня приложения. Я не согласен с использованием ServletContext в более глубоких слоях приложения. Вы знаете другой путь?

Очевидным решением было бы создание собственного синглтона для размещения Injector, но, похоже, что Guice должен предложить какой-то готовый способ сделать это. Я просто пока не могу найти ...

Ответы [ 2 ]

6 голосов
/ 04 апреля 2011

Если вы используете Guice Servlet и предполагаете, что класс, в котором вы хотите использовать Injector, сам вводится, просто введите Injector.

1 голос
/ 07 апреля 2011

Жизненный цикл вашего приложения полностью контролируется контейнером сервлета, поэтому использование прослушивателя контекста для запуска процесса инициализации вашего приложения является логическим результатом этого факта. Таким образом, я бы не сказал, что этот факт сам по себе не нарушает многоуровневую архитектуру, точно так же, как веб-запрос, запускающий активность на уровне модели, не нарушает многоуровневую архитектуру.

Но чтобы не нарушать многоуровневую архитектуру, прослушиватель контекста сервлета не должен связываться с деталями других уровней, он должен только инициировать инициализацию. Таким образом, весь код, связанный с Guice, например фабрика инжекторов Guice, должен располагаться в своем собственном слое. Роль прослушивателя контекста должна быть ограничена вызовом, который запускает инициализацию (например: MyGuiceFactory.init () или MyApp.init ()).

...