🍃 Spring Boot: Магия или Логика? (IoC & Beans)
Когда вы запускаете Spring-приложение, происходит магия: все нужные объекты создаются сами, базы данных подключаются, сервер стартует.
Но за этой магией стоит четкий механизм - IoC Container (Inversion of Control / Инверсия управления).
📦 Что такое Application Context?
Представьте Spring как огромный завод.
🔴 Context (Контейнер) - это сам завод. Он управляет жизненным циклом объектов.
🔴 Bean (Бин) - это любая деталь (объект), которую этот завод создал и хранит у себя на складе.
Суть IoC:
🔴 Обычный подход: Вы сами управляете объектами (
🔴 Spring подход: Вы отдаете управление фреймворку. "Спринг, создай мне сервис и дай его, когда он понадобится". Spring - главный.
🏷 Как сделать Бин? (Аннотации)
Чтобы Spring узнал про ваши классы, их нужно пометить.
1.
2.
3.
4.
5.
💉 Dependency Injection (DI)
Главная фишка. Как один бин попадает внутрь другого?
Например,
❌ Способ 1: Через поле (Field Injection)
Почему плохо: Невозможно протестировать (как подсунуть мок?), скрытые зависимости, возможен
✅ Способ 2: Через конструктор (Constructor Injection)
Золотой стандарт современного Spring.
Плюсы: Поле
⚡ Лайфхак: Lombok
Чтобы не писать конструктор руками, используйте Lombok:
🔥 Итог
Spring, это просто "мешок с объектами" (Context), которые он создает сам и связывает друг с другом (DI).
🔴 Забудьте про
🔴 Используйте внедрение через конструктор.
🔴 Помечайте классы правильными аннотациями (
#SpringBoot #Java #IoC #DI #SpringTips
📲 Мы в MAX
👉@BookJava
Когда вы запускаете Spring-приложение, происходит магия: все нужные объекты создаются сами, базы данных подключаются, сервер стартует.
Но за этой магией стоит четкий механизм - IoC Container (Inversion of Control / Инверсия управления).
📦 Что такое Application Context?
Представьте Spring как огромный завод.
Суть IoC:
Service s = new Service()). Вы - главный.🏷 Как сделать Бин? (Аннотации)
Чтобы Spring узнал про ваши классы, их нужно пометить.
1.
@Component — Самая базовая аннотация. "Эй, Спринг, это бин, управляй им!".2.
@Service - Тот же @Component, но семантически говорит: "Здесь бизнес-логика".3.
@Repository - Тот же @Component, но для работы с БД (ловит специфичные ошибки баз данных).4.
@Controller / @RestController - Для обработки HTTP-запросов.5.
@Configuration + @Bean - Используется, когда нужно создать бин из чужого класса (библиотеки), код которого вы не можете пометить аннотацией @Component.💉 Dependency Injection (DI)
Главная фишка. Как один бин попадает внутрь другого?
Например,
UserService нуждается в UserRepository.❌ Способ 1: Через поле (Field Injection)
@Service
public class UserService {
@Autowired // ⚠️ Не рекомендуется!
private UserRepository repository;
}
Почему плохо: Невозможно протестировать (как подсунуть мок?), скрытые зависимости, возможен
NullPointerException.✅ Способ 2: Через конструктор (Constructor Injection)
Золотой стандарт современного Spring.
@Service
public class UserService {
private final UserRepository repository;
// @Autowired здесь не обязателен (в новых версиях Spring)
public UserService(UserRepository repository) {
this.repository = repository;
}
}
Плюсы: Поле
final (неизменяемое), легко тестировать (можно передать любой репозиторий в конструктор), сразу видно все зависимости класса.⚡ Лайфхак: Lombok
Чтобы не писать конструктор руками, используйте Lombok:
@Service
@RequiredArgsConstructor // Генерирует конструктор для final полей
public class UserService {
private final UserRepository repository; // Всё внедрится само!
}
🔥 Итог
Spring, это просто "мешок с объектами" (Context), которые он создает сам и связывает друг с другом (DI).
new Service().@Service, @Repository).#SpringBoot #Java #IoC #DI #SpringTips
👉@BookJava
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍2🤡2