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