Сварка, Контексты JSR-299 и ссылочная реализация Внедрения зависимости, считает себя как своего рода преемник Spring и Guice.
CDI был под влиянием многих существующих платформ Java, включая Шов, Guice и Spring. Однако CDI имеет свое собственное, очень отличное, символ: более безопасный с точки зрения типов, чем Шов, более с сохранением информации и Менее XML-центральный, чем Spring, больше веб-и корпоративного приложения, способного, чем Guice. Но это, возможно, не был ни один из них без вдохновения от упомянутых платформ и большое сотрудничество и тяжелая работа Экспертной группой (EG) JSR-299.
http://docs.jboss.org/weld/reference/latest/en-US/html/1.html
Что делает Сварку более способной для корпоративного приложения по сравнению с Guice? Есть ли какие-либо преимущества или недостатки по сравнению с Guice? Что Вы думаете о AOP Guice, сравненном с перехватчиками Сварки? Что относительно производительности?
Мой выбор
В конце я решил использовать Guice, потому что мне нравится чистая модель программирования, которая прибывает почти без аннотаций помимо @Inject по умолчанию. Намного легче использовать внешний, освобождает с Guice, чем с CDI. AOP также довольно прост с Guice.
CDI (Weld) пока не получил широкого распространения, поэтому сравнение провести сложно. Несколько моментов:
Прежде чем пытаться ответить на ваш вопрос, позвольте мне добавить важную информацию: JSR 330 ( @Inject
) был стандартизирован проектами Guice и Spring ( объявление от мая 2009 ) и повторно используется в JSR 299 . Это охватывает основные механизмы DI с точки зрения объявления точки впрыска.
Теперь вернемся к вопросу - с оговоркой, что у меня гораздо больше опыта работы со Spring, чем с Guice.
Корпоративные возможности в Weld
beans.xml
). Преимущества / недостатки
Примечание: я попытаюсь добавить сюда несколько пунктов позже, но этот ответ уже длиннее, чем я ожидал, извините.
Weld / CDI
Guice / Spring
АОП и перехватчики
Это очень активно обсуждаемая тема, и я не могу отдавать предпочтение одному перед другим. Оба механизма очень мощные, но требуют хотя бы минимального понимания архитектуры приложения. Также посмотрите Декораторы и ранее упомянутые События . Лучше всего использовать правильный инструмент, но не забывайте, что если разработчик должен работать с одним из этих механизмов, хорошо, если он / она понимает концепцию.
Производительность
К сожалению, я пока не смог разобраться в этом, но есть несколько правил, которым я стараюсь следовать, особенно при использовании фреймворка, который дает вам много функций, а вы этого не замечаете: