Эта статья является вводной частью к серии статей о создании веб-приложения с использованием Java фреймворка Spring. Тем, кто уже знаком с этим фреймворком статья будет мало полезной, в основном это для тех, кто ничего не знает о Spring или же только слышал и собирался в будущем попробовать.
Spring - это фреймворк объединяющий в себе достаточно много полезной функциональности: управление транзакциями, удалённый доступ к логике приложения используя RMI или веб-сервисы, множество возможностей для хранения ваших данных в БД, полнофункциональный MVC-фреймворк, прозрачную интеграцию AOP в приложении, интеграцию с другими известными фреймворками. Основным преимуществом фреймворка является компонентная архитектура, которая позволяет выборочно использовать любой из компонентов, в тоже время предоставляя связанный фреймворк для разработки J2EE приложений.
Архитектура фреймворка выглядит так:

Каждый из этих компонентов может использоваться независимо или же в связке с другими. Ниже приведено общее описание функциональности каждого из них:
- IoC контейнер. Основная часть фреймворка обеспечивающая базовую функциональность.
- Spring Context. Spring контекст - это конфиогурационный файл предоставляющий контекстную информацию приложения, такую как: описание базнес-объектов в приложении, JNDI русурсы, EJB, e-mail, интернационализацию, валидацию.
- Spring AOP. Данный модуль интегрирует аспектно-ориентированное программирование непосредственно в фреймворк, используя его конфигурационные возможности. В результате, вы можете применить AOP к любому управляемому фреймворком объекту вашего приложения. Spring AOP предоставляет поддержку управления транзакциями для объектов Spring-приложения.
- Spring DAO. Предоставляет абстрактный слой для поддержки DAO. Также, содержит в себе полноценную иерархию эксепшенов для управления ошибками, возникающими при работе с различными базами данных.
- Spring ORM. Включает в себя набор различных фреймворков, для обеспечения поддержки ORM (Object Relational Mapping) в приложении, а именно: JDO, интеграцию Hibernate и iBatis.
- Spring Web Module. Предоставляет контекс для web-based приложений. Поддерживает интеграцию с Struts.
- Spring MVC Framework. Полноценная реализация MVC паттерна для разработки веб-приложений.
Из личного опыта могу сказать, что использовал Spring в 3-х крупных проектах. Негативных отзывов нет, есть только положительные. Благодаря Inversion of Control в приложение можно подключить любой другой фреймворк или билиотеку без особого труда. Конфигурируется всё очень просто, отличная поддержка транзакций благодаря модулю AOP (Spring сам заботится о целостности данных, автоматически выполняя commit и rollback, основываясь на эксепшенах). Простая и удобная реализация MVC.
Хорошие примеры использования Spring: FeedBurner, DZone, LinkedIn.
Как-то поверхност но описано, стоит уточнить. Например, через DAO вполне можно использовать полноценный Java Persistance API поверх хибернейта или топлинка. Не сказал, что спринг можно и с другими MVC-фреймворками юзать, например Struts-2 (он же WebWork) использует Spring как “клей” для разных компонентов и инициализатор объектов…
Да, согласен…
думаю, было бы неплохо отдельно написать заметку на этот счет с примерами