Так как Spring может использовать транзакции так же, как EJB. Для меня Spring может заменить требование использования EJB. Может ли кто-нибудь сказать мне, какие дополнительные преимущества использования EJB?
Spring против EJB. Может ли Spring заменить EJB?
Ответ 1
Spring был разработан как альтернатива EJB с самого начала, поэтому ответ, конечно, вы можете использовать Spring вместо EJB.
Если есть "преимущество" использования EJB, я бы сказал, что это будет зависеть от навыков вашей команды. Если у вас нет опыта Spring и большого количества опыта EJB, то, возможно, прилипание к EJB 3.0 - хороший ход.
Серверы приложений, написанные для поддержки стандарта EJB, теоретически могут быть перенесены с одного совместимого сервера приложений Java EE на другой. Но это означает, что вы должны оставаться в стороне от каких-либо конкретных поставщиков, которые блокируют вас одному поставщику.
Spring легко переносится между серверами приложений (например, WebLogic, Tomcat, JBOSS и т.д.), потому что это не зависит от них.
Однако вы заблокированы в Spring.
Spring поощряет хорошие методы проектирования OO (например, интерфейсы, уровни, разделение проблем), которые приносят пользу любой проблеме, к которой они прикасаются, даже если вы решите переключиться на Guice или другую инфраструктуру DI.
Обновление. Этот вопрос и ответ пять лет в 2014 году. Надо сказать, что мир программирования и разработки приложений в то время сильно изменился.
Это уже не просто выбор между Java или С#, Spring или EJB. С vert.x можно вообще отказаться от Java EE. Вы можете писать очень масштабируемые, полиглот без сервера приложений.
Обновление: сейчас март 2016 года. Spring Boot предлагает еще лучший способ писать приложения без серверов приложений Java EE. Вы можете создать исполняемый JAR и запустить его на JVM.
Интересно, продолжит ли Oracle поддерживать спецификацию Java EE. Веб-службы перешли на EJB. Решение EJB мертво. (Только мое мнение.)
Ответ 2
Во-первых, позвольте мне сказать это четко, я не говорю, что вы не должны использовать Spring, но, поскольку вы просите о некоторых преимуществах, вот как минимум два из них:
-
EJB 3 является стандартным, а Spring не является (это де-факто стандарт, но это не одно и то же), и это не изменится в обозримом будущем. Хотя вы можете использовать фреймворк Spring с любым сервером приложений, Spring приложения блокируются как в самом Spring, так и в определенных сервисах, которые вы хотите интегрировать в Spring.
-
Структура Spring располагается поверх серверов приложений и библиотек служб. Код интеграции службы (например, шаблоны доступа к данным) находится в структуре и предоставляется разработчикам приложений. Напротив, структура EJB 3 интегрирована в сервер приложений, а код интеграции службы инкапсулирован за интерфейс. Таким образом, поставщики EJB 3 могут оптимизировать производительность и опыт разработчиков, работая на уровне сервера приложений. Например, они могут тесно привязать механизм JPA к управлению транзакциями JTA. Другим примером является поддержка кластеризации, которая прозрачна для разработчиков EJB 3.
EJB 3 не является совершенным, хотя он все еще не имеет некоторых функций (например, инъекции не управляемых компонентов, таких как простые POJO).
Ответ 3
Паскальные точки действительны. Однако в пользу Spring входят следующие.
-
Спецификация EJB на самом деле немного свободна, и поэтому различные поведения могут наблюдаться на разных серверах приложений. Конечно, для большинства случаев это будет неверно, но у меня была такая проблема для некоторых "темных углов".
-
Spring имеет много дополнительных полезных свойств, таких как spring -test, AOP, MVC, JSF-интеграция и т.д. EJB имеет некоторые из этих (например, перехватчиков), но, на мой взгляд, они не так развиты.
В заключение, это зависит главным образом от вашего конкретного случая.
Ответ 4
Spring предназначен для дополнения EJB, а не для его замены. Spring - это слой поверх EJB. Как известно, кодирование EJB выполняется с использованием API, а это значит, что мы должны реализовать все в API, используя структуру Spring. Мы можем создать код котельной плиты, а затем просто взять эту тарелку, добавить к ней кое-что, а потом все сделать. Внутренний Spring связан с EJB - Spring не будет существовать без EJB.
Основное преимущество использования Spring заключается в том, что между классами нет связи.