Spring Boot Annotations

Spring Boot Annotations

1. обзор

Spring Boot упростил настройку Spring благодаря функции автоматической настройки.

В этом кратком руководстве мы рассмотрим аннотации пакетовorg.springframework.boot.autoconfigure иorg.springframework.boot.autoconfigure.condition.

2. @SpringBootApplicationс

Мы используем эту аннотацию кmark the main class of a Spring Boot application:

@SpringBootApplication
class VehicleFactoryApplication {

    public static void main(String[] args) {
        SpringApplication.run(VehicleFactoryApplication.class, args);
    }
}

@SpringBootApplication инкапсулирует аннотации@Configuration, @EnableAutoConfiguration, and @ComponentScan с их атрибутами по умолчанию.

3. @EnableAutoConfigurationс

@EnableAutoConfiguration, как следует из названия, включает автоконфигурацию. Это означает, чтоSpring Boot looks for auto-configuration beans находится в своем пути к классам и автоматически применяет их.

Обратите внимание, что мы должны использовать эту аннотацию с@Configuration:

@Configuration
@EnableAutoConfiguration
class VehicleFactoryConfig {}

4. Условия автоконфигурации

Обычно, когда мы пишем нашcustom auto-configurations, мы хотим, чтобы Spring былuse them conditionally. Мы можем достичь этого с помощью аннотаций в этом разделе.

В этом разделе мы можем разместить аннотации к классам@Configuration или методам@Bean.

В следующих разделах мы познакомим вас только с основной концепцией каждого условия. Для получения дополнительной информации посетитеthis article.

4.1. @ConditionalOnClass и@ConditionalOnMissingClass

Используя эти условия, Spring будет использовать помеченный bean-компонент автоконфигурации, только если класс в аннотацииargument is present/absent:

@Configuration
@ConditionalOnClass(DataSource.class)
class MySQLAutoconfiguration {
    //...
}

4.2. @ConditionalOnBean и@ConditionalOnMissingBean

Мы можем использовать эти аннотации, когда хотим определить условия на основеpresence or absence of a specific bean:

@Bean
@ConditionalOnBean(name = "dataSource")
LocalContainerEntityManagerFactoryBean entityManagerFactory() {
    // ...
}

4.3. @ConditionalOnPropertyс

С помощью этой аннотации мы можем наложить условия наvalues of properties:

@Bean
@ConditionalOnProperty(
    name = "usemysql",
    havingValue = "local"
)
DataSource dataSource() {
    // ...
}

4.4. @ConditionalOnResourceс

Мы можем заставить Spring использовать определение только тогда, когда конкретныйresource is present:

@ConditionalOnResource(resources = "classpath:mysql.properties")
Properties additionalProperties() {
    // ...
}

4.5. @ConditionalOnWebApplication и@ConditionalOnNotWebApplication

С помощью этих аннотаций мы можем создать условия на основе текущегоapplication is or isn’t a web application:

@ConditionalOnWebApplication
HealthCheckController healthCheckController() {
    // ...
}

4.6. @ConditionalExpressionс

Мы можем использовать эту аннотацию в более сложных ситуациях. Spring будет использовать отмеченное определение, когдаSpEL expression is evaluated to true:

@Bean
@ConditionalOnExpression("${usemysql} && ${mysqlserver == 'local'}")
DataSource dataSource() {
    // ...
}

4.7. @Conditionalс

Для еще более сложных условий мы можем создать класс, оценивающийcustom condition. Мы говорим Spring использовать это настраиваемое условие с@Conditional:

@Conditional(HibernateCondition.class)
Properties additionalProperties() {
    //...
}

5. Заключение

В этой статье мы увидели обзор того, как мы можем точно настроить процесс автоконфигурации и предоставить условия для пользовательских бинов автоконфигурации.

Как обычно доступны примерыover on GitHub.