Ответ
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.