Spring Framework (или коротко Spring) — универсальный фреймворк с открытым исходным кодом для Java-платформы.
Несмотря на то, что Spring не обеспечивал какую-либо конкретную модель программирования, он стал широко распространённым в Java-сообществе главным образом как альтернатива и замена модели Enterprise JavaBeans. Spring предоставляет бо́льшую свободу Java-разработчикам в проектировании; кроме того, он предоставляет хорошо документированные и лёгкие в использовании средства решения проблем, возникающих при создании приложений корпоративного масштаба.
Между тем, особенности ядра Spring применимы в любом Java-приложении, и существует множество расширений и усовершенствований для построения веб-приложений на Java Enterprise платформе. По этим причинам Spring приобрёл большую популярность и признаётся разработчиками как стратегически важный фреймворк.
В основе Spring лежит паттерн Inversion of control. Применительно к легковесным контейнерам, основная идея этого паттерна заключается в устранении зависимости компонентов или классов приложения от конкретных реализаций вспомогательных интерфейсов и делегировании полномочий по управлению созданием нужных реализаций IoC контейнеру. Рассмотрим UML диаграмму.
IoC контейнер отвечает за создание нужной реализации Product для Consumer. При использовании класса Consumer в других проектах мы сможем заменить реализацию интерфейса Product на более подходящую, не внося изменений в код.
Основные преимущества IoC контейнеров:
- управление зависимостями
- упрощение повторного использования классов или компонентов
- упрощение unit-тестирования
- более "чистый" код (Классы больше не занимаются инициализацией вспомогательных объектов. Не стоит, конечно "перегибать палку", управляя созданием абсолютно всех объектов через IoC. В IoC контейнер лучше всего выносить те интерфейсы, реализация которых может быть изменена в текущем проекте или в будущих проектах.)
При разработке приложения с использованием Spring вам необходимо указать конфигурацию вашего проекта. Сделать это можно множеством вариантов (xml-файл, java аннотации, groovy конфигурация). На основании конфигурации спринг создаст контекст, в который будут помещены все необходимые объекты, между которыми будет разрешена необходимая зависимость, а также добавится множество шаблонных операций (транзакции и т.д.). Спринг не заставляет вас использовать какие-то специальные интерфейсы и даже аннотации, вы ничем не ограничены (только вашей бизнес-логикой), поэтому данный фреймворк так популярен (де-факто является стандартом для современных приложений).