Какова роль аннотации @ComponentScan в Spring?

«Какова роль аннотации @ComponentScan в Spring?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

@ComponentScan — это аннотация Spring Framework, которая указывает контейнеру, в каких пакетах искать классы-компоненты для автоматического обнаружения и регистрации в контексте приложения как Spring-бины.

Как работает:

  • Сканирует указанные пакеты (по умолчанию — пакет класса конфигурации и его подпакеты).
  • Обнаруживает классы, помеченные стереотипными аннотациями: @Component, @Service, @Repository, @Controller, @Configuration.
  • Регистрирует найденные классы как бины в ApplicationContext.

Пример использования:

@Configuration
@ComponentScan("com.example.service") // Сканирует только указанный пакет
public class AppConfig {
}

Ключевые возможности:

  • Указание нескольких пакетов: @ComponentScan({"com.example.service", "com.example.dao"})
  • Фильтрация компонентов: Можно включать (includeFilters) или исключать (excludeFilters) классы по аннотациям, регулярным выражениям или другим критериям.
  • Наследование конфигураций: @ComponentScan можно использовать в иерархии конфигурационных классов.