Ответ
@ComponentScan — это аннотация Spring, которая инструктирует контейнер IoC сканировать классы на наличие Spring-компонентов и автоматически регистрировать их как бины.
Механизм работы:
- Стартовая точка: Сканирование начинается с пакета, указанного в
basePackagesилиbasePackageClasses. Если пакет не задан, используется пакет класса, аннотированного@ComponentScan. - Поиск компонентов: Spring просматривает все классы в указанных пакетах (и их подпакетах) в classpath.
- Идентификация: Классы, аннотированные как
@Component,@Service,@Repository,@Controller,@Configuration, обнаруживаются и регистрируются вApplicationContext.
Пример конфигурации:
@Configuration
@ComponentScan(
basePackages = {"com.example.service", "com.example.repository"},
excludeFilters = @ComponentScan.Filter(
type = FilterType.ANNOTATION,
classes = {Configuration.class}
)
)
public class AppConfig {}
Ключевые параметры для настройки:
basePackages / basePackageClasses: Задает пакеты для сканирования.includeFilters: Позволяет включать классы, даже если у них нет стандартных Spring-аннотаций (например, с помощью кастомных аннотаций).excludeFilters: Позволяет исключать определенные классы из сканирования.
Важно: В Spring Boot @ComponentScan неявно используется аннотацией @SpringBootApplication, которая сканирует все подпакеты от класса с этой аннотацией.