Они оба довольно похожи.См. Также этот вопрос: EJB 3.1 или Spring 3. Когда выбрать какой из них?
Если вы используете EJB, вы можете выбрать таргетинг на Java EE.Это означает, что вам не нужно включать дополнительные WAR-файлы в вашу WAR, так как целевая среда уже поддерживает EJB.Сравните это с таргетингом на Java SE, где вам не нужно включать классы, такие как ArrayList и HashMap, в ваш jar, поскольку у любой среды выполнения Java SE такие уже есть.
Конечно, вы также можете включать EJB jar в вашприложение, которое удобно, если вы хотите настроить таргетинг на контейнеры сервлетов, такие как Tomcat или Jetty.В этом случае OpenEJB, вероятно, является лучшим выбором, но любая реализация EJB может запускать свой контейнер во встроенном режиме (это требование спецификации EJB) и может использоваться в Java SE.
Существует также версия EJBэто даже легче, чем полный EJB.Это называется EJB3-lite и поддерживается такими серверами, как Glassfish Web Profile и Resin.Они оба чуть больше, чем голые Tomcat (Resin - 23 МБ) и дают вам полный стек из коробки.
Я лично считаю, что EJB3 лучше Spring.Это менее сложный и менее тяжелый вес.EJB3 начал революцию, требуя только простых аннотаций и строго придерживаясь соглашения о конфигурации.Исторически Spring требовал огромных объемов XML даже для самых простых вещей.Однако Spring учился у EJB и теперь применяет тот же подход.
В конце концов, обе являются зрелыми и хорошими технологиями, и вы не ошибетесь ни с одной из них (просто избегайте их смешивания,если только вы не обязаны).