Ответ
Явное объявление бина в @Configuration классе необходимо, когда автоматического сканирования (@ComponentScan) недостаточно. Основные сценарии:
- Интеграция сторонних библиотек: Классы, исходный код которых нельзя аннотировать
@Component. - Кастомизация инстанса: Требуется тонкая настройка бина (параметры конструктора, свойства) перед внедрением в контекст.
- Условное создание: Бин должен создаваться только при определенных условиях (профиль, наличие свойства).
Пример конфигурации:
@Configuration
public class AppConfig {
// 1. Кастомная настройка пула соединений
@Bean
public DataSource dataSource() {
HikariDataSource ds = new HikariDataSource();
ds.setJdbcUrl("jdbc:h2:mem:test");
ds.setMaximumPoolSize(10);
return ds;
}
// 2. Условный бин для prod-среды
@Bean
@Profile("prod")
public Service prodService() {
return new ProdService();
}
}
Явная конфигурация дает полный контроль, но увеличивает объем кода. Оптимально — гибридный подход.