Является ли CDI хорошей заменой Spring? - PullRequest
66 голосов
/ 12 мая 2011

Мы планируем написать веб-приложение с нуля, было решено использовать последнюю версию Glassfish, соответствующую стандарту Java EE 6, поэтому мы анализируем возможность использования CDI вместо Spring.

Можно ли сказать, что CDI может заменить Spring?

Ответы [ 3 ]

91 голосов
/ 12 мая 2011

CDI означает «внедрение контекста и зависимости», в то время как Spring представляет собой законченную экосистему вокруг контейнера ввода зависимости. Чтобы сравнить оба, вы должны дифференцировать сравнение.

Внедрение зависимостей обрабатывается обоими контейнерами. Основным отличием является тот факт, что CDI обрабатывает DI динамически (он же: с состоянием) - это означает, что зависимости разрешаются в время выполнения . Подход Spring - static - это означает, что компоненты соединяются вместе в время создания . Хотя на первый взгляд CDI-путь может показаться немного необычным, он намного лучше и предлагает гораздо больше и более продвинутых опций (я пишу это на фоне двух продуктивных приложений CDI).

Если вы посмотрите на экосистему , ситуация будет иной: Spring поставляется в комплекте с большим количеством банок (> 150), тогда как CDI сам по себе довольно мал. Типичное использование CDI было бы внутри сервера приложений Java EE 6, но вы можете легко заставить его работать в движке сервлета или даже в Java SE. Это означает, что использование CDI не предполагает использования Hibernate, JPA, EJB или чего-либо еще - это ваше дело.

Если вам нужна дополнительная функциональность, CDI поставляется с концепцией переносимых расширений (что само по себе делает API полезным). Существуют независимые модули расширения, такие как Apache CODI и Seam 3, которые охватывают такие темы, как безопасность, рассылка, отчетность и т. Д.

Подводя итог: CDI - это не «замена» для экосистемы Spring, а скорее улучшение по сравнению с механизмом внедрения зависимостей Spring. Это часть Java EE 6, поэтому, если вы работаете с GlasFish с Java EE 6, вам обязательно нужно выбрать CDI. На мой взгляд, ваш вопрос: можно ли заменить Spring на Java EE 6? Я думаю, мой ответ довольно очевиден; -)

Взгляните на Сварка , чтобы получить хорошее начало ...

10 голосов
/ 12 мая 2011

Spring - это больше, чем просто контейнер внедрения зависимостей.Он также имеет инструменты для AOP, шаблоны для использования с JPA, SQL и т. Д. И даже более.

Однако CDI можно использовать в качестве замены для API Spring DI.

4 голосов
/ 21 августа 2011

Я использую Apache OpenWebBeans в качестве реализации CDI и MyFaces CODI в качестве портативного расширения для нескольких проектов.Я очень доволен этим, и у меня не было проблем с этим.OpenWebBeans в настоящее время немного не хватает документации, но если вы не можете заставить что-то работать, довольно просто использовать Maven Archetypes, предоставленные MyFaces, для генерации простых проектов со всеми необходимыми зависимостями или вы спрашиваете в списке рассылки.Это так здорово, если вы просто работаете над своим Приложением, и вас не блокируют неприятные ошибки.Я также сделал много проектов со Spring.Все в порядке, но если вы спросите, что я буду использовать для следующего проекта, ясный ответ - OpenWebBeans и CODI!Я предпочитаю OpenWebBeans, а не Weld, потому что OpenWebBeans очень удобен в использовании, и это здорово, потому что вы можете настроить более или менее все, что не охвачено официальным API / SPI CDI, и производительность во время выполнения лучше.И после первого проекта я бы никогда больше не усомнился в CODI, потому что он очень стабильный, у них есть регулярные выпуски, и большинство из них принесли отличные новые функции, которые значительно улучшают производительность.ИМХО - ИМХО место, которое является наиболее стабильным и откуда большинство инноваций пришло во всей стране CDI.

Чтобы ответить на ваш вопрос: Для меня CDI полностью заменен Spring, но вам нужны портативные расширения, которые заполняют пробелы.CDI, как стандарт, никогда не предназначался для решения всех проблем, а некоторые части, такие как разговоры, были разбиты по замыслу.Хорошей новостью является то, что у вас есть отличные проекты, такие как MyFaces CODI.CODI исправляет почти все эти проблемы.

...