Всегда ли нужно использовать аннотацию @Bean в Spring?

«Всегда ли нужно использовать аннотацию @Bean в Spring?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, не всегда. Аннотация @Bean используется для явного объявления бина в конфигурационных классах. В большинстве случаев можно обойтись без нее благодаря механизму компонентного сканирования.

Когда @Bean НЕ нужен:

  • Классы, аннотированные стереотипными аннотациями (@Component, @Service, @Repository, @Controller), автоматически регистрируются как бины.

Когда @Bean ОБЯЗАТЕЛЕН:

  1. Для регистрации бинов из сторонних библиотек, код которых вы не можете изменить.
  2. Когда требуется сложная логика инициализации бина.
  3. Для создания нескольких бинов одного типа с разными конфигурациями.

Примеры:

// 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 для ручного и декларативного определения бинов, когда автоматическое сканирование недостаточно.