Spring Framework — это платформа, которая предоставляет богатый набор средств и инструментов для создания довольно сложных Java приложений с необыкновенной легкостью. Эта платформа завоевала большую популярность у разработчиков благодаря тому, что вместе со снижением объема кода приложения позволяет сосредоточиться на предметной области, не беспокоясь о многих сопутствующих задачах, таких как безопасность, доступ к данным, транзакции или логгирование.

Сам по себе Spring не привносит ничего нового, однако вместе с тем предоставляет механизм взаимоувязки в единое целое разных частей приложения, таких как пользовательский интерфейс, уровень бизнес-логики, доступ к данным и так далее. В некотором роде Spring можно представить в виде диспетчера, взаимодействующего со многими популярными технологиями, такими как JPA, JMS, JSF, Quartz и т.д. и заставляющего их работать в одном приложении.

Spring Framework: Введение

Spring объединяет несколько технологий в одном приложении

 

Преимущества Spring

  • Если сравнивать с J2EE, Spring значительно легче и меньше по размеру и может работать в гораздо более стесненных условиях. В минимальном виде этот фреймворк занимает всего около 2 Мб. Зачастую Spring используется даже в разработке обычных Java приложений не уровня Enterprise.
  • Spring обладает модульной архитектурой. При наличии достаточно большого количества компонентов и классов, можно использовать только те, которые необходимы для реализации требуемого функционала.
  • Одна из проблем Java EE заключается в том, что при использовании Enterprise JavaBeans требуется наличие EJB контейнера, куда размещается приложение. Эти контейнеры предоставляются серверами приложений, например Geronimo, JBoss, WebSphere и тому подобными. Spring же не требует сервера приложений и может быть запущен в веб-контейнере, например, Tomcat или же вообще как отдельное приложение.
  • Java EE требует от разработчика реализовывать множество интерфейсов и абстрактных классов. Например, чтобы создать класс сервлета (servlet), нужно наследовать его от класса HTTPServlet. Это приводит к тому, что приложение становится тесно связанным с инфраструктурой, для которой оно написано, и если возникнет необходимость переноса приложения на другую платформу, или наоборот, внесения существующего приложения в Java EE, это окажется непростой и затратной задачей, требующей значительного рефакторинга. В Spring же такая проблема отсутствует, так как для его использования не нужно ничего переопределять или наследовать, а вместо этого достаточно использовать POJO и ввести несколько аннотаций.
  • Spring использует внедрение зависимостей (Dependency Injection, DI), что позволяет программисту больше концентрироваться на бизнес-логике, а не на том, как координировать взаимодействие и обеспечивать зависимости между объектами и компонентами.
  • Spring также предоставляет применение принципа разделения ответственности (Separation of Concerns, SoC), когда различные концепции, такие как запись в лог или безопасность, не относящиеся непосредственно к бизнес логике и не пересекающиеся друг с другом, могут быть увязаны в единое целое.
  • Spring предоставляет готовое решение в том числе и для тестирования, позволяя запускать код в нужном окружении и писать тесты в основном именно для бизнес логики, поскольку инфраструктурная часть, использованная в приложении, уже реализована самим Spring.