Какие ключевые аннотации Spring используются для Java-based конфигурации?

Ответ

Java-based конфигурация в Spring заменяет XML и основана на аннотациях. Вот основные из них:

1. @Configuration Помечает класс как источник определений бинов. Внутри такого класса методы, аннотированные @Bean, создают экземпляры бинов.

@Configuration
public class AppConfig {
    @Bean
    public DataSource dataSource() {
        return new EmbeddedDatabaseBuilder()
                .setType(EmbeddedDatabaseType.H2)
                .build();
    }
}

2. @Bean Объявляет метод, который возвращает объект, управляемый Spring-контейнером. Название метода по умолчанию становится именем бина.

3. @ComponentScan Указывает пакеты для автоматического обнаружения и регистрации компонентов (@Component, @Service, @Repository, @Controller).

@Configuration
@ComponentScan("com.example.services", "com.example.repositories")
public class AppConfig {}

4. @PropertySource & @Value Загружают свойства из файлов и инжектируют их.

@Configuration
@PropertySource("classpath:application.properties")
public class AppConfig {
    @Value("${db.url}")
    private String dbUrl;

    @Bean
    public MyService myService() {
        return new MyService(dbUrl);
    }
}

5. @Profile Активирует конфигурацию или бин только для указанного профиля (например, dev, test, prod).

@Configuration
@Profile("dev")
public class DevConfig {
    @Bean
    public DataSource devDataSource() {
        // Конфигурация для разработки
    }
}

6. @Import Позволяет импортировать другие классы конфигурации, модулируя настройку.

@Configuration
@Import({DatabaseConfig.class, SecurityConfig.class})
public class MainConfig {}

7. @Conditional и его производные (Spring Boot) Условное создание бина на основе заданного условия (например, @ConditionalOnClass, @ConditionalOnProperty).

Spring Boot упрощает это: аннотация @SpringBootApplication объединяет @Configuration, @ComponentScan и @EnableAutoConfiguration.