Как правильно использовать Google Guice на сервере приложений? - PullRequest
4 голосов
/ 18 марта 2010

Это кажется странным вопросом (очевидный ответ - «Производство»), но если вы прочитаете документацию по Java:

/**
  * We want fast startup times at the expense of runtime performance and some up front error
 * checking.
 */
DEVELOPMENT,

/**
 * We want to catch errors as early as possible and take performance hits up front.
 */
PRODUCTION

Предположим, что у вас есть вызов состояния без обращения к серверу приложений,метод начального приема (или около того) создает новый инжектор при каждом вызове.Если в данном вызове все привязки модулей не нужны, то, по-видимому, было бы лучше использовать этап разработки (который используется по умолчанию), а не заблаговременно снижать производительность, поскольку вы можете вообще никогда его не использовать.и здесь различие между «начальным» и «быстродействием» является своего рода спорным, поскольку это один вызов.

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

Итак, вопрос сводится к тому, верны ли предположения в приведенном выше?Сэкономите ли вы производительность большого набора модулей, когда заданный срок службы инжектора составляет один вызов?

1 Ответ

4 голосов
/ 02 февраля 2012

Не нужно создавать инжектор для каждого запроса. Это не совсем то, как Guice предназначен для использования - вам нужен только один Инжектор для каждого приложения. Инжектор действительно представляет собой конфигурацию или подключение приложения, а не кратковременное состояние.

Я подозреваю, что вам нужно изучить Guice Scopes .

GuiceServlet предоставляет вам @RequestScoped, который позволяет ограничить время жизни объекта HTTP-запросом, который звучит как то, что вы хотите сделать.

Если вы не в сервлете, вы всегда можете определить собственную настраиваемую область действия . Это не очень сложно.

...