Что делает аннотация @Configuration в Spring?

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

Ответ

@Configuration — это аннотация Spring Framework, которая помечает класс как источник конфигурации бинов. Она заменяет XML-конфигурацию, позволяя определять бины в виде Java-кода.

Основные особенности:

  • Классы с @Configuration обрабатываются контейнером Spring для создания бинов.
  • Методы внутри такого класса, помеченные @Bean, создают и возвращают экземпляры бинов, которые управляются Spring-контейнером.
  • Вызовы @Bean-методов кэшируются, поэтому Spring гарантирует, что каждый бин будет создан только один раз (синглтон по умолчанию).
  • Поддерживает все возможности Spring, включая внедрение зависимостей через @Autowired.

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

@Configuration
public class AppConfig {
    @Bean
    public DataSource dataSource() {
        return new HikariDataSource(); // Создание бина источника данных
    }

    @Bean
    public MyService myService(DataSource dataSource) {
        // Spring автоматически внедрит бин DataSource
        return new MyServiceImpl(dataSource);
    }
}

Почему это важно: @Configuration — это основа современной Java-based конфигурации Spring, обеспечивающая типобезопасность, рефакторинг и более сложную логику инициализации по сравнению с XML.