Вы не выбираете между EJB и Spring, вы фактически выбираете между Java EE и Spring, потому что EJB - это только часть Java EE, которая включает в себя также такие компоненты, как JMS, Servlets, JSP, JSF, CDI и т. Д. В своем (J2EE 1.4), модель корпоративного выпуска Java имела множество недостатков и недостатков, но самыми важными были то, что она была утомительной и многословной с большим количеством кодовых табличек и тоннами xml-конфигураций. Весна была представлена в качестве альтернативной структуры, благоприятствующей принципу конвенции над конфигурацией. Другими словами, весной были некоторые разумные дефолты, которые можно было переконфигурировать, если вам это нужно. Java EE 5 ввел существенные изменения, приняв тот же принцип соглашения над конфигурацией от Spring, резко уменьшающий количество и сложность кода, необходимые для того, чтобы все было в порядке, поэтому в этой области Spring больше не имеет каких-либо ощутимых преимуществ.
Также важно иметь в виду, что Java EE - это всего лишь спецификация. Чтобы создать приложение для реального мира, вам нужна реализация, и их сегодня много - Glassfish, JBoss, TomcatEE и т. Д., Все это обеспечивает различные реализации спецификации Java EE, добавляющие дополнительную сложность - я имею в виду, теперь вам нужно выбрать, какая реализация Java EE выбирать. Вы можете создать это с помощью Spring, который исходит из одного источника.
Оба фреймворка дают вам практически такую же функциональность. Все транзакции поддержки, ORM, предоставляют инструменты для построения бизнес-логики, поддержки CDI, АОП. В Spring и Java EE вы можете использовать только те части, которые вам нужны, другими словами, вам не нужно использовать всю инфраструктуру. Вы можете использовать их вместе - они могут взаимодействовать. Благодаря внедрению встраиваемых контейнеров теперь вы можете даже использовать функции Java EE, которые вам нужны в таких областях, как настольные приложения, которые традиционно были сферой весны.
Но в одной области, где Java EE по-прежнему не хватает весны, удобна тестируемость. Нелегко написать модульные тесты для EJB - для этого вам нужно использовать специальную стороннюю структуру (Arquillian) и написать код шаблона внутри ваших тестов (например, для создания тестового пакета развертывания и его развертывания на контейнере и т. Д. .). Фактически, Java EE не имеет никакой поддержки для тестирования EJB из коробки. Напротив, Spring настроен с возможностью тестирования и TDD. Тестирование Весенние бобы просты, так как Spring включает в себя комплектную поддержку как для тестирования (модульного тестирования, интеграционного тестирования) всех частей приложения, так и для издевательств.
http://stackoverflow.com/questions/7076144/ejb-3-1-or-spring-3-when-to-choose-which-one – elsadek