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