TGViewer
Разработка с Дарьей Матвеевой Разработка с Дарьей Матвеевой @system_design_explained · 72 subscribers
Post #52 235
Как Spring ищет бины при старте приложения?

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

Если просто создать класс с нужным функционалом в библиотеке, пометить его как @Component, и подключить библиотеку в проект в качестве зависимости, создаст ли фреймворк этот бин? Ответ - нет.
В приложении Spring Boot, application класс обычно помечается аннотацией @SpringBootApplication, которая включает в себя аннотацию @ComponentScan. И фреймворк будет сканировать на предмет наличия бинов только пакет, в котором объявлен класс помеченный какой-либо из этих аннотаций, и его подпакеты.
Spring не сканирует весь classpath или все приложение для поиска бинов.
Если надо инжектировать в класс бин из подключенной библиотеки, например ru.mylib.MyBean, можно, например, добавить к application классу аннотацию @ComponentScan("ru.mylib").

Есть и другой способ - использовать spring boot starters.
Чем стартер отличается от библиотеки? Помимо того, что стартер обычно содержит набор библиотек, стартеры включают в себя автоконфигурации.
Автоконфигурация - это класс конфигурации, помеченный анннотацией @Configuration или @AutoConfiguration. В стартере они должны быть перечислены в файле spring.factories или org.springframework.boot. autoconfigure.AutoConfiguration.imports. При запуске приложения Spring Boot сканирует classpath, и находит все jar с данными файлами. И создает все бины, которые объявлены в файлах автоконфигурации.

В частности, можно превратить нашу библиотеку myLib в стартер, добавив автоконфигурацию с аннотацией @ComponentScan("ru.mylib"), и тогда все бины из данного пакета будут созданы и доступны во время работы приложения.
More from @system_design_explained
  1. Sep 22, 2026Нашла способ, который мгновенно и без дополнительных усилий увеличил мою продуктивность пр…
  2. Mar 27, 2026Я в ВК : https://vk.ru/dev_with_dm
  3. Mar 27, 2026Читаю в последнее время много критики микросервисов, и у меня тоже есть пример, как раз за…
  4. Mar 4, 2026В функциональных языках рекомендуется делать все объекты immutable, и, хотя на работе я пи…
  5. Dec 4, 2025Недавно занималась задачей, где нужно было реализовать оптимистическую блокировку сущности…
  6. Nov 21, 2025Обнаружила еще один плюс TDD. Согласно подходу, я пишу тест, который падает, пишу код, что…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →