Автор оригинала: Attila Fejér.
1. Обзор
Spring Boot упростил настройку Spring с помощью функции автоматической настройки.
В этом кратком руководстве мы рассмотрим аннотации из пакетов org.springframework.boot.autoconfigure и org.springframework.boot.autoconfigure.condition .
2. @SpringBootApplication
Мы используем эту аннотацию, чтобы отметить основной класс приложения Spring Boot :
@SpringBootApplication class VehicleFactoryApplication { public static void main(String[] args) { SpringApplication.run(VehicleFactoryApplication.class, args); } }
@SpringBootApplication инкапсулирует @Configuration , @EnableAutoConfiguration и @ComponentScan аннотации с их атрибутами по умолчанию.
3. @EnableAutoConfiguration
@EnableAutoConfiguration , как следует из его названия, включает автоматическую настройку. Это означает, что Spring Boot ищет компоненты автоматической конфигурации в своем пути к классу и автоматически применяет их.
Обратите внимание, что мы должны использовать эту аннотацию с @Configuration :
@Configuration @EnableAutoConfiguration class VehicleFactoryConfig {}
4. Условия автоматической настройки
Обычно, когда мы пишем наши пользовательские автоконфигурации , мы хотим, чтобы Spring использовал их условно . Мы можем добиться этого с помощью аннотаций в этом разделе.
Мы можем поместить аннотации в этом разделе в @Configuration classes или @Bean methods.
В следующих разделах мы представим только базовую концепцию, лежащую в основе каждого условия. Для получения дополнительной информации, пожалуйста, посетите эту статью .
4.1. @ConditionalOnClass и @ConditionalOnMissingClass
Используя эти условия, Spring будет использовать отмеченный компонент автоматической настройки только в том случае, если класс в аргументе аннотации присутствует/отсутствует :
@Configuration @ConditionalOnClass(DataSource.class) class MySQLAutoconfiguration { //... }
4.2. @ConditionalOnBean и @ConditionalOnMissingBean
Мы можем использовать эти аннотации, когда хотим определить условия, основанные на наличии или отсутствии определенного компонента :
@Bean @ConditionalOnBean(name = "dataSource") LocalContainerEntityManagerFactoryBean entityManagerFactory() { // ... }
4.3. @ConditionalOnProperty
С помощью этой аннотации мы можем создать условия для значений свойств :
@Bean @ConditionalOnProperty( name = "usemysql", havingValue = "local" ) DataSource dataSource() { // ... }
4.4. @Conditionaldatasource
Мы можем заставить Spring использовать определение только при наличии определенного ресурса :
@ConditionalOnResource(resources = "classpath:mysql.properties") Properties additionalProperties() { // ... }
4.5. @ConditionalOnWebApplication и @ConditionalOnNotWebApplication
С помощью этих аннотаций мы можем создавать условия, основанные на том, является ли текущее приложение веб-приложением или нет :
@ConditionalOnWebApplication HealthCheckController healthCheckController() { // ... }
4.6. @ConditionalExpression
Мы можем использовать эту аннотацию в более сложных ситуациях. Spring будет использовать помеченное определение, когда выражение SpEL будет оценено как true :
@Bean @ConditionalOnExpression("${usemysql} && ${mysqlserver == 'local'}") DataSource dataSource() { // ... }
4.7. @Условный
Для еще более сложных условий мы можем создать класс, оценивающий пользовательское условие . Мы говорим Spring использовать это пользовательское условие с @Conditional :
@Conditional(HibernateCondition.class) Properties additionalProperties() { //... }
5. Заключение
В этой статье мы рассмотрели обзор того, как мы можем точно настроить процесс автоматической настройки и предоставить условия для пользовательских компонентов автоматической настройки.
Как обычно, примеры доступны на GitHub .