Найти в Дзене
Записки о Java

Введение в Spring Framework

Поговорим об основах Spring Framework — самого популярного фреймворка в экосистеме Java.
Даже если вы новичок, к концу статьи вы поймёте: Spring — это мощный, модульный фреймворк с открытым исходным кодом, предназначенный для упрощения разработки enterprise-приложений на Java. 💡 Представьте себе конструктор LEGO:
Spring даёт вам готовые «кирпичики» — для работы с базами данных, безопасностью, веб-API, транзакциями — и помогает их собрать в единое приложение. 🔄 Вместо того чтобы создавать объекты вручную, Spring сам управляет их жизненным циклом и внедряет зависимости автоматически. ✅ Преимущества: 🧩 Позволяет вынести сквозную функциональность (логирование, транзакции, безопасность) из бизнес-логики. ➡️ Теперь каждый вызов метода в service будет автоматически логироваться — без изменения кода сервисов. ✅ Используется для: Spring построен как набор независимых модулей — вы подключаете только то, что нужно. Spring Framework │ ├── spring-core ← Ядро: IoC, DI ├── spring-beans
Оглавление
Рисунок: введение в Spring Framework
Рисунок: введение в Spring Framework

Введение

Поговорим об основах Spring Framework — самого популярного фреймворка в экосистеме Java.
Даже если вы новичок, к концу статьи вы поймёте:

  • Что такое IoC и DI
  • Как работает AOP
  • Из каких модулей состоит Spring
  • Почему он так популярен

Что такое Spring Framework?

Spring — это мощный, модульный фреймворк с открытым исходным кодом, предназначенный для упрощения разработки enterprise-приложений на Java.

💡 Представьте себе конструктор LEGO:
Spring даёт вам готовые «кирпичики» — для работы с базами данных, безопасностью, веб-API, транзакциями — и помогает их собрать в единое приложение.

Почему Spring? Основные преимущества

1. Inversion of Control (IoC) / Внедрение зависимостей (DI)

🔄 Вместо того чтобы создавать объекты вручную, Spring сам управляет их жизненным циклом и внедряет зависимости автоматически.

Пример без Spring

Рисунок: пример создания связанного кода без использования Spring Framework
Рисунок: пример создания связанного кода без использования Spring Framework

Пример с Spring

Рисунок: пример создания связанного кода с использованием Spring Framework
Рисунок: пример создания связанного кода с использованием Spring Framework

✅ Преимущества:

  • Лёгкое тестирование (можно подменить моками)
  • Гибкость
  • Уменьшение связанности (loose coupling)

2. AOP (Aspect-Oriented Programming)

🧩 Позволяет вынести сквозную функциональность (логирование, транзакции, безопасность) из бизнес-логики.

Пример: логирование каждого метода

Рисунок: пример логирования вызова каждого метода с использованием Spring Framework
Рисунок: пример логирования вызова каждого метода с использованием Spring Framework

➡️ Теперь каждый вызов метода в service будет автоматически логироваться — без изменения кода сервисов.

✅ Используется для:

  • @Transactional
  • @Cacheable
  • @Retry
  • Логирование
  • Метрики

3. Модульность

Spring построен как набор независимых модулей — вы подключаете только то, что нужно.

Архитектура Spring: Основные модули

Spring Framework

├── spring-core ← Ядро: IoC, DI

├── spring-beans ← Управление бинами

├── spring-context ← Контекст приложения

├── spring-aop ← Поддержка AOP

├── spring-jdbc ← Работа с БД

├── spring-orm ← Интеграция с Hibernate

├── spring-web ← Веб и REST

└── spring-tx ← Управление транзакциями

Разберём ключевые модули подробно.

1️⃣ spring-core — Ядро фреймворка

Содержит основные утилиты:

  • org.springframework.util — вспомогательные классы
  • org.springframework.core — поддержка аннотаций, ресурсов
⚙️ Это фундамент, на котором строится всё остальное.

2️⃣ spring-beans — Управление бинами

Bean — это любой объект, управляемый Spring Container.

Рисунок: бин в Spring Framework. Помечается обычно аннотацией @Component
Рисунок: бин в Spring Framework. Помечается обычно аннотацией @Component

➡️ Spring создаёт экземпляр EmailService, хранит его и предоставляет другим компонентам.

3️⃣ spring-context — Контекст приложения

ApplicationContext — центральный интерфейс, который предоставляет:

  • Доступ к бинам
  • Поддержку i18n (локализация)
  • События (events)
  • Среду выполнения (Environment)

Пример: запуск контекста

Рисунок: работа с контекстом в Spring Framework
Рисунок: работа с контекстом в Spring Framework

🔁 IoC и DI: Как это работает?

Что такое IoC?

Inversion of Control (IoC) — передача управления фреймворку.

  • Раньше: Вы сами создавали объекты
  • С Spring: Spring создаёт и управляет ими

  • Раньше: Вы решали, кто кому нужен
  • Со Spring: Spring внедряет зависимости

Типы внедрения зависимостей:

Рисунок: типы внедрения зависимостей
Рисунок: типы внедрения зависимостей

🔄 Жизненный цикл бина

  1. Spring сканирует классы с аннотациями (@Component, @Service)
  2. Создаёт экземпляр
  3. Внедряет зависимости
  4. Выполняет @PostConstruct
  5. Передаёт бин клиенту
  6. При завершении — @PreDestroy
Рисунок: аннотации @PostConstruct и @PreDestroy позволяют влиять на жизенный цикл бина
Рисунок: аннотации @PostConstruct и @PreDestroy позволяют влиять на жизенный цикл бина

AOP: Aspect-Oriented Programming

Позволяет разделить бизнес-логику и сквозную функциональность.

Термины:

  • Aspect — модуль сквозной логики (например, логирование)
  • Join Point — точка в программе (например, вызов метода)
  • Advice — действие, выполняемое в Join Point
  • Pointcut — выражение, определяющее, где применять Advice

Пример: измерение времени выполнения

Рисунок: Аспкт для измерения времени выполнения методов
Рисунок: Аспкт для измерения времени выполнения методов
Рисунок: метод, который будет оценивать Аспект
Рисунок: метод, который будет оценивать Аспект

Объясняю, как пятилетнему

Представь, что ты строишь замок из кубиков.
Ты не сам ищешь башню, стену и ворота.
Ты говоришь:
«Мне нужна башня!» — и кто-то сам приносит её.

Spring — это как умный помощник, который:

  • Сам собирает кубики
  • Следит, чтобы всё было на своих местах
  • Помогает, если что-то сломается