Две технологии не являются взаимоисключающими. И когда вы говорите EJB, это зависит от того, говорите ли вы о сессионных компонентах или объектных компонентах (или компонентах, управляемых сообщениями для полноты).
Сессионные компоненты без сохранения состояния были и всегда были весьма полезны, если только по какой-либо другой причине, кроме как они обеспечивают разумно согласованный и низкий барьер для входа в распределенные транзакции.
EJB3 также берет листок из книги Spring с некоторыми функциями внедрения зависимостей.
При этом, это было давней причиной спора.
Вероятно, стоит прочитать некоторые (многие) сравнения в Интернете, такие как это .
Действительно трудно рекомендовать одно другому, не зная ваших требований. Лично я предпочитаю Spring, если только у меня нет веских причин не делать этого.