Ответ
Нет, не всегда. Аннотация @Bean используется для явного объявления бина в конфигурационных классах. В большинстве случаев можно обойтись без нее благодаря механизму компонентного сканирования.
Когда @Bean НЕ нужен:
- Классы, аннотированные стереотипными аннотациями (
@Component,@Service,@Repository,@Controller), автоматически регистрируются как бины.
Когда @Bean ОБЯЗАТЕЛЕН:
- Для регистрации бинов из сторонних библиотек, код которых вы не можете изменить.
- Когда требуется сложная логика инициализации бина.
- Для создания нескольких бинов одного типа с разными конфигурациями.
Примеры:
// 1. Автоматическое создание бина (без @Bean)
@Service
public class UserService {
// Spring создаст бин автоматически
}
// 2. Явное создание бина (требуется @Bean)
@Configuration
public class AppConfig {
@Bean // Обязательно, так как DataSource - сторонний класс
public DataSource dataSource() {
return new HikariDataSource();
}
@Bean // Обязательно для кастомной конфигурации
public RestTemplate restTemplate() {
RestTemplate rt = new RestTemplate();
rt.setConnectTimeout(5000);
return rt;
}
}
Вывод: Используйте @Bean для ручного и декларативного определения бинов, когда автоматическое сканирование недостаточно.