Annotations de démarrage de printemps
1. Vue d'ensemble
Spring Boot facilite la configuration de Spring avec sa fonction de configuration automatique.
Dans ce rapide tutoriel, nous allons explorer les annotations des packagesorg.springframework.boot.autoconfigure etorg.springframework.boot.autoconfigure.condition.
2. @SpringBootApplication
Nous utilisons cette annotation pourmark the main class of a Spring Boot application:
@SpringBootApplication
class VehicleFactoryApplication {
public static void main(String[] args) {
SpringApplication.run(VehicleFactoryApplication.class, args);
}
}
@SpringBootApplication encapsule les annotations@Configuration, @EnableAutoConfiguration, and @ComponentScan avec leurs attributs par défaut.
3. @EnableAutoConfiguration
@EnableAutoConfiguration, comme son nom l'indique, permet la configuration automatique. Cela signifie queSpring Boot looks for auto-configuration beans sur son chemin de classe et les applique automatiquement.
Notez que nous devons utiliser cette annotation avec@Configuration:
@Configuration
@EnableAutoConfiguration
class VehicleFactoryConfig {}
4. Conditions de configuration automatique
Habituellement, lorsque nous écrivons noscustom auto-configurations, nous voulons que Spring soituse them conditionally. Nous pouvons y parvenir avec les annotations de cette section.
Nous pouvons placer les annotations dans cette section sur les classes@Configuration ou les méthodes@Bean.
Dans les sections suivantes, nous présenterons uniquement le concept de base de chaque condition. Pour plus d'informations, veuillez visiterthis article.
4.1. @ConditionalOnClass et@ConditionalOnMissingClass
En utilisant ces conditions, Spring n'utilisera le bean de configuration automatique marqué que si la classe dans l'annotationargument is present/absent:
@Configuration
@ConditionalOnClass(DataSource.class)
class MySQLAutoconfiguration {
//...
}
4.2. @ConditionalOnBean et@ConditionalOnMissingBean
Nous pouvons utiliser ces annotations lorsque nous voulons définir des conditions basées sur lespresence or absence of a specific bean:
@Bean
@ConditionalOnBean(name = "dataSource")
LocalContainerEntityManagerFactoryBean entityManagerFactory() {
// ...
}
4.3. @ConditionalOnProperty
Avec cette annotation, nous pouvons faire des conditions sur lesvalues of properties:
@Bean
@ConditionalOnProperty(
name = "usemysql",
havingValue = "local"
)
DataSource dataSource() {
// ...
}
4.4. @ConditionalOnResource
Nous pouvons faire en sorte que Spring n'utilise une définition que lorsqu'unresource is present spécifique:
@ConditionalOnResource(resources = "classpath:mysql.properties")
Properties additionalProperties() {
// ...
}
4.5. @ConditionalOnWebApplication et@ConditionalOnNotWebApplication
Avec ces annotations, nous pouvons créer des conditions basées sur si lesapplication is or isn’t a web application actuels:
@ConditionalOnWebApplication
HealthCheckController healthCheckController() {
// ...
}
4.6. @ConditionalExpression
Nous pouvons utiliser cette annotation dans des situations plus complexes. Spring utilisera la définition marquée lorsque lesSpEL expression is evaluated to true:
@Bean
@ConditionalOnExpression("${usemysql} && ${mysqlserver == 'local'}")
DataSource dataSource() {
// ...
}
4.7. @Conditional
Pour des conditions encore plus complexes, nous pouvons créer une classe évaluant lescustom condition. Nous disons à Spring d'utiliser cette condition personnalisée avec@Conditional:
@Conditional(HibernateCondition.class)
Properties additionalProperties() {
//...
}
5. Conclusion
Dans cet article, nous avons vu comment nous pouvons affiner le processus de configuration automatique et fournir des conditions pour les beans de configuration automatique personnalisés.
Comme d'habitude, les exemples sont disponiblesover on GitHub.