Component Scanning

Базовый Spring
≈ 1 мин чтения

Не регистрировать каждый класс вручную

Когда beans десятки или сотни, перечислять каждый из них в конфигурации неудобно. Component Scanning позволяет Spring пройти по указанным пакетам, найти подходящие классы и автоматически зарегистрировать их в контейнере.

@Configuration
@ComponentScan("com.example.app")
class AppConfig {
}

@Service
class OrderService {
}

При создании контекста Spring сканирует пакет com.example.app и его подпакеты. OrderService будет найден как компонент и станет bean контейнера.

Стереотипные аннотации

Базовая аннотация — @Component. Аннотации @Service, @Repository и @Controller являются более смысловыми вариантами для разных ролей класса. Для чтения кода это полезный сигнал: по аннотации сразу видно назначение компонента.

Граница сканирования имеет значение. Если пакет с компонентом не входит в область сканирования, Spring его не зарегистрирует, даже если на классе стоит правильная аннотация.

Component Scanning хорошо подходит для собственных классов приложения. Но иногда нужно зарегистрировать объект сторонней библиотеки или создать bean нестандартным способом. Для этого удобнее явная Java-конфигурация — её разберём дальше.