Відповіді:
Spring був розроблений як альтернатива EJB з самого його заснування, тому відповідь, звичайно, можна використовувати Spring замість EJB.
Якщо є "перевага" використання EJB, я б сказав, що це залежатиме від навичок вашої команди. Якщо у вас немає весняного досвіду та багато досвіду EJB, можливо, дотримуватися EJB 3.0 - це хороший крок.
Сервери додатків, написані для підтримки стандарту EJB, теоретично можуть переноситися з одного сумісного сервера додатків Java EE на інший. Але це означає триматися подалі від будь-яких розширень, що стосуються конкретного постачальника, які замикають вас на одному постачальнику.
Весняні порти легко між серверами додатків (наприклад, WebLogic, Tomcat, JBOSS тощо), оскільки це не залежить від них.
Однак ви зачинені у весну.
Весна заохочує належні практики проектування ОО (наприклад, інтерфейси, шари, розділення проблем), які приносять користь будь-якій проблемі, до якої вони торкаються, навіть якщо ви вирішите перейти на Guice або іншу структуру DI.
Оновлення: У 2014 році цьому питанню та відповіді виповнилося п’ять років. Слід сказати, що світ програмування та розробки додатків за цей час дуже змінився.
Це вже не просто вибір між Java або C #, Spring або EJB. За допомогою vert.x можна повністю уникнути Java EE. Ви можете писати високомасштабні поліглот-програми без сервера додатків.
Оновлення: Зараз березень 2016 року. Spring Boot пропонує ще кращий спосіб писати програми без серверів програм Java EE. Ви можете створити виконуваний файл JAR і запустити його на JVM.
Цікаво, чи продовжить Oracle підтримувати специфікацію Java EE. Веб-сервіси перейняли для EJB. Рішення EJB мертве. (Тільки моя думка.)
По-перше, дозвольте це чітко сказати, я не кажу, що ви не повинні використовувати Spring, але, оскільки ви просите про деякі переваги, ось принаймні дві з них:
EJB 3 є стандартом, тоді як Spring - ні (це фактично стандарт, але це не одне і те ж), і це не зміниться в найближчому майбутньому. Хоча ви можете використовувати рамку Spring з будь-яким сервером додатків, додатки Spring блокуються як у самій Spring, так і у певних службах, які ви вирішите інтегрувати у Spring.
Фреймворк Spring розміщений поверх серверів програм та бібліотек служб. Код інтеграції служби (наприклад, шаблони доступу до даних) знаходиться у фреймворку та піддається розробникам додатків. Навпаки, платформа EJB 3 інтегрована в сервер додатків, а код інтеграції служби інкапсульований за інтерфейсом. Таким чином, постачальники EJB 3 можуть оптимізувати продуктивність та досвід роботи розробника, працюючи на рівні сервера додатків. Наприклад, вони можуть тісно пов'язати механізм JPA з управлінням транзакціями JTA. Інший приклад - підтримка кластеризації, яка є прозорою для розробників EJB 3.
EJB 3, однак, не є ідеальним, але він все ще не має деяких функцій (наприклад, ін'єкція таких керованих компонентів, як прості POJO).
Точки Паскаля дійсні. Однак є на користь Весни.
Специфікація EJB насправді трохи розкута, і тому на різних серверах прикладних програм можна спостерігати різну поведінку. Звичайно, це не стосується більшості випадків, але у мене були такі проблеми для деяких «темних куточків».
Spring має багато зайвих смакот, таких як spring-test, AOP, MVC, інтеграція JSF тощо. EJB має деякі з них (перехоплювачі, наприклад), але, на мій погляд, вони не настільки розвинені.
На закінчення, це залежить головним чином від вашого конкретного випадку.
EJBContainer.createEJBContainer()
API для використання вбудованого контейнера. Отже, все-таки ваше твердження неправильне.
Пружина покликана доповнити EJB, а не замінити його. Весна - це шар поверх EJB. Як ми знаємо, кодування EJB виконується за допомогою API, що означає, що ми повинні реалізовувати все в API, використовуючи фреймворк Spring. Ми можемо створити код котлової таблички, тоді просто візьмемо цю табличку, додамо до неї щось, тоді все готово. Внутрішньо Spring пов'язаний з EJB - Spring не існував би без EJB.
Головною перевагою використання Spring є те, що між класами взагалі немає зв’язку.