Я планирую начать с нового проекта, и я смотрю на современные современные веб-фреймворки Java. Я решил создать свое приложение вокруг Guice и, скорее всего, использую очень легкий ORM, такой как Squill/JEQUEL/JaQu или аналогичный, но я не могу принять решение о веб-фреймворке. Какой из них лучше всего подходит в такой легкой среде? И какой из них лучше всего интегрируется с Guice?
Какая веб-платформа Java лучше всего подходит для Google Guice?
Ответ 1
Я собрал некоторый опыт по этой теме, так как я начал программировать новый проект в ноябре. Проект находится на поздней стадии.
Для меня важны следующие рекомендации по дизайну:
- Использовать современный стек технологий, который будет полезен и будет использоваться в будущем.
- Уменьшить количество артефактов проекта - использовать аннотации/код Java, где это имеет смысл, опустить XML.
- Использовать фреймворки с открытым исходным кодом
- Активное сообщество
- Не альфа-этап
- Легкие
- Избегайте дублирования понятий
- Я могу объяснить концепции в нем моим двум разработчикам, которые, несмотря на то, что были хорошими программистами, никогда не использовали инъекцию зависимостей (DI ) или веб-фреймворки.
- Может служить технологической основой для будущих проектов.
Google Guice как контейнер DI был очевидным выбором - очевидно, самым продуманным DI contianer, с блестящими разработчиками и хорошим сообществом, Он выполняет все упомянутые выше пункты пули.
Итак, я создал свой базовый стек технологий. Начал с Guice, добавил Hibernate для сохранения (наряду с warp -perist и warp-servlet). Затем я написал несколько базовых DAO, которые выбирают что-то.
Затем я попытался сделать следующее: добавила другую веб-структуру поверх этого.
- XSLT с xStream, используя обычный HTTP-сервлеты
- JSF-MyFaces
- Apache Wicket
- warp-widgets
Я создал простую страницу с таблицей, заполненной DAO, заголовками и текстовым полем со всеми четырьмя фреймами.
Это были мои результаты при сравнении четырех фреймворков.
XSLT и XStream - это своего рода хардкорный подход. Это не действительно основа, а жизнеспособная полностью безгосударственная технология для высокопроизводительных приложений. Это был самый быстрый способ обслуживания тестовой страницы. В режиме отладки 3 мс на localhost против примерно 30-50 мкс с другими фреймами.
Интеграция Guice была относительно гладкой и хорошей с использованием warp-сервлета, которая позволяла мне вводить в сервлеты и вводить httprequest, httpresponse, сеанс в других объектах, не передавая их. Недостатки: нет сообщества вообще, так как я единственный человек, который рассмотрит этот стек. - нет готовых к использованию компонентов.
Затем я взглянул на JSF и Guice: конечно, можно поставить инжектор в контексте сервлета и использовать guice в качестве локатора сервисов. При прямом подходе невозможно внедрить поддержку beans где-то еще. Использование настраиваемой переменной resolver разрешает это частично, но затем вы теряете интеграцию IDE в своих файлах JSF, и вам придется использовать уродливые FQN для вашей поддержки beans, или создайте сопоставление ключей в виде строки → . Оба уродливые:
- Преимущества: хорошее сообщество, многие разработчики на рынке труда (для меня нет критериев). Вы не будете уволены за использование JSF, если что-то пойдет не так.
- Недостатки: приносит свой собственный механизм Inversion of control (IoC), который концептуально конфликтует с guice.
warp-widgets: я создал свой простой пример, используя это для удовольствия; это ранняя альфа-сцена. Приятно было использовать и его компоненты легко реализовать и повторно использовать самостоятельно. Он нацелен на предоставление типичного HTML с идеальной интеграцией Guice. Поскольку похоже, что у него был только один активный разработчик, который теперь может работать над Guice 2.0, я бы сказал, что сообщество почти не существует. Он работал как шарм, был достаточно быстрым, но я был бы альфа-тестером. Это было слишком рискованно для меня, чтобы рассмотреть его для коммерческого проекта.
Apache Wicket: этот проект сначала удивил меня с помощью wicket-ioc и wicket-guice, объединившихся в загрузку ядра. Встраивание конструктора в веб-страницы невозможно, только поле setter+. Инъекция на веб-страницах Wicket проста, просто добавьте @Inject
в поля, которые вы хотите заполнить, но вы не должны понимать как это работает в фоновом режиме. Трудные вещи случаются. Теоретически возможна инъекция веб-страниц, но я не использовал ее один раз, поскольку это делает невозможным использование установленных URL-адресов, плюс она будет конфликтовать с сохраненным/сериализованным состоянием.
Введенные члены классов прозрачно обрабатываются с помощью сериализации веб-страниц, что необходимо для поддержки поддержки браузера. Wicket использует нулевые внешние артефакты - всего лишь небольшую конфигурацию URL-адресов в классе приложения. Таким образом, вся конфигурация выполняется на Java, что хорошо подходит для модели Guice. Четкое разделение HTML и Java. Это с открытым исходным кодом, как и большинство компонентов, которые многочисленны и хорошего качества. Это с 2005 года (?) И является проектом Apache на высшем уровне. Несмотря на то что это многофункциональная инфраструктура, ее API является разумным компактным (все основные классы соответствуют одному JPEG на моем экране). В отличие от других, он не приносит собственного механизма IoC, а скорее рассматривает IoC как услугу, которая может быть предоставлена Spring Framework, Guice и т.д., И эта философия делает это превосходным Интеграция гиков.
Я упоминал действительно умную и легкую поддержку Ajax?
Рамки, которые не были глубоко оценены: tapestry5 - приносит свой IoC. Seam: не является собственной картой, а мета-рамкой, которая обычно включает Spring, JSF. Hibernate. (Хотя Spring теоретически может быть заменен Гисом.)
Сводка: из оцененных фреймов, Apache Wicket был явным победителем - в отношении интеграции Guice + всех других упомянутых критериев.
Помимо нас, двое, некоторые другие люди столкнулись с этой проблемой до.
Ответ 2
У Wicket есть встроенный модуль Guice, который я не использовал (но я использовал Wicket совсем немного, и понравилось).
Ответ 3
Здесь статья о интеграция Guice with Stripes
Ответ 4
Структура воспроизведения является приятной. У него есть поддержка Guice (также я еще не пробовал).
Ответ 5
Хороший легкий веб-контейнер Simple. Он чрезвычайно эффективен и может использоваться с такими фреймами, как Restlet и Jersey.
Ответ 6
Mojave MVC Web Framework - очень простая и легкая структура, в которую входит Guice.