Spring против EJB. Может ли Spring заменить EJB?

Так как Spring может использовать транзакции так же, как EJB. Для меня Spring может заменить требование использования EJB. Может ли кто-нибудь сказать мне, какие дополнительные преимущества использования 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 заключается в том, что между классами нет связи.