🍃 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
⌨️ Открытый урок «Неожиданное введение в Spring Context».
🗓 22 января в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Разработчик на Spring Framework».
На очередном открытом уроке курса "Разработчик на Spring Framework", мы на примере своего приложения попробуем реализовать свой IoC-контейнер, которой отдаленно будет напоминать Spring Context
Кому будет интересно:
Начинающим Java-бэкенд-разработчикам.
Результаты после вебинара:
Поймете общую идею IoC/Spring IoC.
🔗 Ссылка на регистрацию: https://vk.cc/cTwZTO
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🗓 22 января в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Разработчик на Spring Framework».
На очередном открытом уроке курса "Разработчик на Spring Framework", мы на примере своего приложения попробуем реализовать свой IoC-контейнер, которой отдаленно будет напоминать Spring Context
Кому будет интересно:
Начинающим Java-бэкенд-разработчикам.
Результаты после вебинара:
Поймете общую идею IoC/Spring IoC.
🔗 Ссылка на регистрацию: https://vk.cc/cTwZTO
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
❤1👍1
🧙♂️ Spring Boot: Магия под капотом (Starters & AutoConfig)
Вы когда-нибудь задумывались: почему вы просто добавляете одну строчку в
За этим стоят два кита Spring Boot: Starters и AutoConfiguration.
1️⃣ Starters (Стартеры) - "Всё включено"
В старом Spring, чтобы сделать веб-приложение, нужно было вручную найти версии для Spring MVC, Tomcat, Jackson, Validation API... и молиться, чтобы они были совместимы.
Starter — это готовый набор зависимостей (dependencies), собранный в один пакет. Это как "Комбо-обед" в ресторане.
🔴 Хотите Веб? Добавляете
* Внутри: Tomcat + Spring MVC + Jackson + Logback.
🔴 Хотите Тесты? Добавляете
*Внутри: JUnit + Mockito + AssertJ + Hamcrest.
Вам больше не нужно думать о версиях библиотек. Spring Boot следит за "BOM" (Bill of Materials) и гарантирует, что все версии внутри стартера дружат друг с другом.
2️⃣ AutoConfiguration - "Умный детектив"
Это мозг фреймворка. Когда приложение запускается, Spring Boot начинает сканировать ваш
Он рассуждает примерно так:
1. "Так, я вижу, что в зависимостях есть класс
2. "Я вижу классы Tomcat и Spring MVC?" "Значит, нужно поднять встроенный веб-сервер на порту 8080 и настроить
3. "О, программист сам создал свой бин
Вся эта логика держится на аннотациях
🔴
🔴
⚙️ Главная кнопка:
Вы вешаете эту аннотацию над
🕵️♂️ Pro-Tip: Как увидеть магию?
Иногда автоконфигурация мешает, или вы не понимаете, почему Spring решил подключить ту или иную базу.
Добавьте в
При запуске в консоль вывалится Condition Evaluation Report. Там будет честно написано:
🔴 ✅ Positive Matches: Что Spring настроил сам (и почему).
🔴 ❌ Negative Matches: Что Spring проигнорировал (потому что не нашел нужных классов или вы перекрыли это своим бином).
🔥 Итог
🔴 Starters экономят время на подбор зависимостей.
🔴 AutoConfiguration экономит время на написание рутинных конфигов.
🔴 Spring Boot работает по принципу Convention over Configuration (Соглашение важнее конфигурации): "Я дам тебе лучшие настройки по умолчанию, но ты всегда можешь их изменить".
#SpringBoot #Java #Starters #AutoConfig
📲 Мы в MAX
👉@BookJava
Вы когда-нибудь задумывались: почему вы просто добавляете одну строчку в
pom.xml, пишете main метод, и у вас волшебным образом поднимается Tomcat, настраивается JSON-конвертер и подключается логирование?За этим стоят два кита Spring Boot: Starters и AutoConfiguration.
1️⃣ Starters (Стартеры) - "Всё включено"
В старом Spring, чтобы сделать веб-приложение, нужно было вручную найти версии для Spring MVC, Tomcat, Jackson, Validation API... и молиться, чтобы они были совместимы.
Starter — это готовый набор зависимостей (dependencies), собранный в один пакет. Это как "Комбо-обед" в ресторане.
spring-boot-starter-web.* Внутри: Tomcat + Spring MVC + Jackson + Logback.
spring-boot-starter-test.*Внутри: JUnit + Mockito + AssertJ + Hamcrest.
Вам больше не нужно думать о версиях библиотек. Spring Boot следит за "BOM" (Bill of Materials) и гарантирует, что все версии внутри стартера дружат друг с другом.
2️⃣ AutoConfiguration - "Умный детектив"
Это мозг фреймворка. Когда приложение запускается, Spring Boot начинает сканировать ваш
classpath (все подключенные библиотеки jar).Он рассуждает примерно так:
1. "Так, я вижу, что в зависимостях есть класс
H2Driver?" "Значит, программист хочет базу данных. Создам-ка я ему бин DataSource с настройками для H2!"2. "Я вижу классы Tomcat и Spring MVC?" "Значит, нужно поднять встроенный веб-сервер на порту 8080 и настроить
DispatcherServlet."3. "О, программист сам создал свой бин
DataSource?" "Окей, тогда я отступаю и свою автоконфигурацию не применяю."Вся эта логика держится на аннотациях
@Conditional...:@ConditionalOnClass: Создать бин, если найден класс X.@ConditionalOnMissingBean: Создать бин, ТОЛЬКО если программист не создал такой же сам.⚙️ Главная кнопка:
@SpringBootApplicationВы вешаете эту аннотацию над
main классом. На самом деле это "матрешка", внутри которой спрятаны 3 другие аннотации:
@SpringBootConfiguration // Говорит: "Это конфигурационный класс"
@EnableAutoConfiguration // Говорит: "ВКЛЮЧИ МАГИЮ!" (запусти сканирование classpath)
@ComponentScan // Говорит: "Ищи пользовательские бины в этом пакете"
public @interface SpringBootApplication { ... }
🕵️♂️ Pro-Tip: Как увидеть магию?
Иногда автоконфигурация мешает, или вы не понимаете, почему Spring решил подключить ту или иную базу.
Добавьте в
application.properties одну строчку:
debug=true
При запуске в консоль вывалится Condition Evaluation Report. Там будет честно написано:
🔥 Итог
#SpringBoot #Java #Starters #AutoConfig
👉@BookJava
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5