Получить инжектор Guice в веб-приложении


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

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

2 5

2 ответа:

Предполагая, что вы используете сервлет Guice и предполагаете, что класс, В который вы хотите ввести инжектор, вводится сам, просто введите инжектор.

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

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