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.