Guice две очень полезные технологии. Этот пост объясняет, что они из себя представляют, как их можно использовать вместе и какую пользу это приносит.
Google Web Toolkit обеспечивает один из самых элегантных способов написания веб-приложений. С версией 2 он достиг нового уровня простоты использования: простая установка, быстрая обработка разработки, тестирование во внешнем браузере, макет на основе CSS, который работает даже для сложных сценариев и т. Д. Guice — это легкая инфраструктура для внедрения зависимостей и помогает в структурировании приложения. У этого также есть один из самых изящных API Java вокруг. Объединение их означает, что Guice управляет сервисами GWT и объектами на стороне сервера. Это шаги установки:
Шаг 1:
Установите GWT . Установка GWT стала простой, потому что и GWT SDK, и плагин Google (с поддержкой IDE для GWT) могут быть установлены как плагины Eclipse.
Шаг 2:
Установите Guice . Тоже просто. Загрузите JAR, поместите его в каталог
war / WEB-INF / lib внутри каталога вашего проекта GWT, добавьте его в путь сборки Java.
Шаг 3. Позвольте Guice управлять всеми удаленными сервисами, как описано в статье «
Guice with GWT ». Мне нужен был
aopalliance.jar в дополнение к двум JAR-файлам, упомянутым в статье. К сожалению,
@RemoteServiceRelativePathотносительно пути модуля. Ниже приведен пример, где это было принято во внимание.
public class ServiceModule extends ServletModule { @Override protected void configureServlets() { serve("/"+ServerConstants.SERVICE_PATH).with(MyServlet.class); bind(MyService.class).to(MyServiceImpl.class); } } @RemoteServiceRelativePath("../"+ServerConstants.SERVICE_PATH) public interface MyService extends RemoteService { //... }
Преимущества: Поскольку все сервисы управляются одним сервлетом, один просто регистрирует новый сервис в Guice, и он становится доступным для клиента. Не нужно настраивать дополнительный сервлет. Чтобы полностью оценить Guice, сначала изучите базовую (конструкторскую)
зависимость . После этого вы готовы к объяснению
областей применения : инжектор Guice — это фабрика для объектов. По умолчанию он создает новый экземпляр каждый раз, когда он вызывается. Это можно изменить, назначив области классам. Например,
одноэлементная область означает, что класс создается только один раз; если инжектору предписано создать более одного экземпляра, он всегда будет возвращать один и тот же. Каждый вызов метода службы — это отдельный HTTP-запрос. Соответственно, занятия в
Объем запроса создается заново для каждого запроса. Инжектор имеет привязку для HttpServletRequest и может таким образом внедрить ее в экземпляр в области запроса. Сервисный метод обрабатывает запрос, запрашивая инжектор для экземпляра в области запроса и вызывая один из его методов. Области также могут быть использованы для управления сеансом, поскольку существует область сеанса. Экземпляры создаются один раз за сеанс и могут содержать любые данные сеанса (кто в данный момент вошел в систему и т. Д.). Нет больше прямых возни с
HttpSession ! По запросу
Provider <MySessionScopedClass> экземпляры в одноэлементной области могут получить доступ к текущему экземпляру
MySessionScopedClass .
Дополнительные советы Guice: если вы хотите расширить класс
компонентовс помощью реализации интерфейсного
плагина вы можете сделать это с помощью
мультибиндинга . Интерфейсный
плагин является мультисвязанным с набором классов, и
компонент запрашивает
Set <Plugin> . Затем можно свободно перебирать все
экземпляры подключаемых модулей, чтобы они могли выполнять задачи или информировать их о важных событиях. Guice также помогает в регистрации:
Guice имеет встроенную привязку для
java.util.logging.Logger , предназначенную для сохранения некоторого шаблона. Связывание автоматически устанавливает имя Logger на имя класса , в который
Logger впрыскивается. [
источник ]
Потокобезопасность: если вы находитесь в одиночной или сеансовой области, вы должны быть поточно-ориентированными Если вы находитесь в области запроса или «нет области действия» (= создается каждый раз), вы этого не сделаете. Интересно, что Crazy Bob Lee
рекомендует :
Если объект действительно не имеет состояния, для Guice быстрее создать новый экземпляр, чем извлечь одиночный. Если Guice каждый раз создает новый экземпляр, он может полностью обходить слой области видимости, не говоря уже о логике внутри одноэлементной области.
Мораль: используйте последние две области как можно чаще.