Anotações de inicialização por mola

Anotações de inicialização por mola

1. Visão geral

Spring Boot facilitou a configuração do Spring com seu recurso de configuração automática.

Neste tutorial rápido, vamos explorar as anotações dos pacotesorg.springframework.boot.autoconfigureeorg.springframework.boot.autoconfigure.condition.

2. @SpringBootApplication

Usamos esta anotação paramark the main class of a Spring Boot application:

@SpringBootApplication
class VehicleFactoryApplication {

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

@SpringBootApplication encapsula anotações@Configuration, @EnableAutoConfiguration, and @ComponentScan com seus atributos padrão.

3. @EnableAutoConfiguration

@EnableAutoConfiguration, como o próprio nome diz, ativa a configuração automática. Isso significa queSpring Boot looks for auto-configuration beans está em seu caminho de classe e os aplica automaticamente.

Observe que temos que usar esta anotação com@Configuration:

@Configuration
@EnableAutoConfiguration
class VehicleFactoryConfig {}

4. Condições de configuração automática

Normalmente, quando escrevemos nossocustom auto-configurations, queremos que o Spring sejause them conditionally. Podemos conseguir isso com as anotações nesta seção.

Podemos colocar as anotações nesta seção nas classes@Configuration ou métodos@Bean.

Nas próximas seções, apresentaremos apenas o conceito básico por trás de cada condição. Para obter mais informações, visitethis article.

4.1. @ConditionalOnClass e@ConditionalOnMissingClass

Usando essas condições, o Spring só usará o bean de configuração automática marcado se a classe emargument is present/absent da anotação:

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

4.2. @ConditionalOnBean e@ConditionalOnMissingBean

Podemos usar essas anotações quando quisermos definir as condições com base nopresence or absence of a specific bean:

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

4.3. @ConditionalOnProperty

Com esta anotação, podemos fazer condições novalues of properties:

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

4.4. @ConditionalOnResource

Podemos fazer com que o Spring use uma definição apenas quando umresource is present específico:

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

4.5. @ConditionalOnWebApplication e@ConditionalOnNotWebApplication

Com essas anotações, podemos criar condições com base em se oapplication is or isn’t a web application atual:

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

4.6. @ConditionalExpression

Podemos usar esta anotação em situações mais complexas. O Spring usará a definição marcada quando oSpEL expression is evaluated to true:

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

4.7. @Conditional

Para condições ainda mais complexas, podemos criar uma classe avaliandocustom condition. Dizemos ao Spring para usar esta condição personalizada com@Conditional:

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

5. Conclusão

Neste artigo, vimos uma visão geral de como podemos ajustar o processo de configuração automática e fornecer condições para beans de configuração automática personalizados.

Como de costume, os exemplos estão disponíveisover on GitHub.