Какие аннотации Spring используются для регистрации бинов в ApplicationContext?

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

Ответ

Spring предоставляет несколько аннотаций для объявления бинов, которые затем управляются ApplicationContext. Выбор зависит от роли компонента.

1. Стереотипные аннотации (Stereotype Annotations): При сканировании компонентов (@ComponentScan) Spring автоматически регистрирует классы, помеченные этими аннотациями, как бины.

  • @Component: Базовая аннотация для любого бина.
  • @Service: Специализация @Component для бизнес-логики сервисного слоя.
  • @Repository: Специализация для слоя доступа к данным (DAO). Добавляет трансляцию исключений JDBC в DataAccessException.
  • @Controller / @RestController: Для классов веб-уровня (MVC контроллеры).

2. Ручное определение бинов в Java-конфигурации: Когда требуется больший контроль над созданием бина (например, инстанцирование стороннего класса), используется комбинация @Configuration и @Bean.

Пример конфигурации с @Bean:

@Configuration // Указывает, что класс содержит определения бинов
public class AppConfig {
    // Метод, аннотированный @Bean, возвращает объект, который Spring помещает в контекст
    @Bean
    public MyService myService() {
        // Здесь может быть сложная логика создания экземпляра
        return new MyServiceImpl();
    }

    @Bean
    public DataSource dataSource() {
        // Создание и настройка бина DataSource
        return new HikariDataSource();
    }
}

Почему @Bean? Он позволяет определять бины программно, что полезно для настройки инфраструктурных компонентов, которые не являются частью вашего кода (сторонние библиотеки).