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 ищет bean-компоненты автоконфигурации в своем пути к классам и автоматически применяет их.
Обратите внимание, что мы должны использовать эту аннотацию с @Configuration
:
@Configuration
@EnableAutoConfiguration
class VehicleFactoryConfig {}
4. Условия автоматической настройки
Обычно, когда мы пишем свои собственные автоконфигурации , мы хотим, чтобы Spring использовал их условно . Мы можем добиться этого с помощью аннотаций в этом разделе.
Мы можем поместить аннотации в этом разделе на классы @Configuration или методы
@Bean
.
В следующих разделах мы представим только основную концепцию каждого условия. Для получения дополнительной информации, пожалуйста, посетите эту статью .
4.1. @ConditionalOnClass
и @ConditionalOnMissingClass
Используя эти условия, Spring будет использовать отмеченный bean-компонент автоконфигурации только в том случае, если класс в аргументе аннотации присутствует/отсутствует :
@Configuration
@ConditionalOnClass(DataSource.class)
class MySQLAutoconfiguration {
//...
}
4.2. @ConditionalOnBean
и @ConditionalOnMissingBean
Мы можем использовать эти аннотации, когда хотим определить условия, основанные на наличии или отсутствии определенного bean-компонента :
@Bean
@ConditionalOnBean(name = "dataSource")
LocalContainerEntityManagerFactoryBean entityManagerFactory() {
// ...
}
4.3. @ConditionalOnProperty
С помощью этой аннотации мы можем задать условия для значений properties :
@Bean
@ConditionalOnProperty(
name = "usemysql",
havingValue = "local"
)
DataSource dataSource() {
// ...
}
4.4. @ConditionalOnResource
Мы можем заставить 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 .