Не ответ, а комментарий ко всем ответам - достали уже с этим Spring. По сути, Spring - это контейнер, в котором разворачивается приложение, и которому Spring предоставляет различные сервисы, в основном: управление транзакциями, развертывание веб-сервисов, Depedency Injection. При этом, сам Spring обычно работает под управлением внешнего контейнера - сервера приложений. Проблема в том, что современные сервера приложений (бесплатные - JBoss/WildFly, TomEE) предоставляют ТЕ ЖЕ САМЫЕ сервисы из коробки. Получается контейнер в контейнере, и попробуй разберись из какого из них ты получаешь тот или иной сервис. Во многих случаях ресурсы просто дублируются - те же бины JBoss находит в jar-ах сам и без каких-либо указаний сразу их деплоит. Плюс вы в Spring-е их же конфигурируете и деплоите второй раз. А если вы в аннотациях указали @Singleton, как себя поведет ваша Система?
Spring - отличная штука, была, лет 5 назад, когда была спецификация J2EE. Сейчас все самое нужное, из того что он давал, уже есть в спецификациях JEE 6, и в серверах приложений, реализующих эти спецификации. Опытные люди говорят так: если у вас есть проект на Spring, работайте и дальше на Spring, если вы создаете проект с нуля - берите JEE 6, про Spring забудьте. Да, у Spring все еще появляются уникальные обертки над различными сервисами, за счет которых они еще пытаются доказать свою востребованность. Но, во-первых, то же, что дает Spring, практически всегда можно сделать другими способами. Во-вторых, в большинстве реальных проектов используется 3-5% сервисов Spring-а, и как я уже сказал, эти сервисы уже есть в серверах приложений.
Если что, погуглите "Spring vs JEE 6" прежде чем холиварить...