Ответ
Spring IoC-контейнер управляет объектами, которые называются бинами. Бин попадает в контекст приложения одним из следующих способов:
1. Автоматическое сканирование компонентов (Component Scanning)
Наиболее распространенный способ. Классы помечаются стереотипными аннотациями, а Spring сканирует указанные пакеты и регистрирует их как бины.
@Component— общая аннотация для любого компонента.@Service— для классов бизнес-логики.@Repository— для классов доступа к данным (DAO).@Controller/@RestController— для веб-контроллеров.
@Service // Spring создаст и будет управлять экземпляром этого класса
public class UserService {
// ...
}
Сканирование активируется аннотацией @ComponentScan в классе конфигурации.
2. Явное объявление в конфигурации Java
Используется, когда нужно сконфигурировать бин, класс которого находится вне вашего контроля (например, из сторонней библиотеки), или требуется сложная логика инициализации.
@Configuration
public class AppConfig {
@Bean // Метод возвращает объект, который Spring регистрирует как бин
public DataSource dataSource() {
return new HikariDataSource();
}
}
3. Конфигурация через XML (устаревший, но поддерживаемый способ)
<bean id="myBean" class="com.example.MyBeanClass"/>
Что происходит дальше? После регистрации Spring берет на себя полный жизненный цикл бина: создание экземпляра, внедрение зависимостей (DI), вызов методов инициализации/уничтожения (при наличии), управление областью видимости (scope).