Utilisation de Spring @Value avec les valeurs par défaut

1. Vue d'ensemble

L' annotation @Value de Spring fournit un moyen pratique d'injecter des valeurs de propriété dans les composants. Il est également très utile de fournir des valeurs par défaut raisonnables pour les cas où une propriété peut ne pas être présente .

C'est ce sur quoi nous allons nous concentrer dans cet article: comment spécifier une valeur par défaut pour l' annotation @Value Spring. Pour un guide rapide plus détaillé sur @Value , consultez l'article ici.

2. Valeurs par défaut des chaînes

Examinons la syntaxe de base pour définir une valeur par défaut pour une propriété String :

@Value("${some.key:my default value}") private String stringWithDefaultValue; 

Si some.key ne peut pas être résolu, alors stringW ithDefaultValue sera défini sur la valeur par défaut de « ma valeur par défaut» .

De même, nous pouvons définir une chaîne de longueur nulle comme valeur par défaut:

@Value("${some.key:})" private String stringWithBlankDefaultValue;

3. Primitifs

Pour définir une valeur par défaut pour les types primitifs tels que boolean et int , nous utilisons la valeur littérale:

@Value("${some.key:true}") private boolean booleanWithDefaultValue;
@Value("${some.key:42}") private int intWithDefaultValue; 

Si nous le voulions, nous pourrions utiliser des wrappers primitifs à la place en changeant les types en booléen et entier .

4. Tableaux

Nous pouvons également injecter une liste de valeurs séparées par des virgules dans un tableau:

@Value("${some.key:one,two,three}") private String[] stringArrayWithDefaults; @Value("${some.key:1,2,3}") private int[] intArrayWithDefaults;

Dans le premier exemple ci-dessus, les valeurs « un» , « deux» et « trois» sont injectées par défaut dans stringArrayWithDefaults .

Dans le deuxième exemple, les valeurs 1, 2 et 3 sont injectées par défaut dans intArrayWithDefaults .

5. Utilisation de SpEL

Nous pouvons également utiliser Spring Expression Language (SpEL) pour spécifier une expression et une valeur par défaut.

Dans l'exemple ci-dessous, nous nous attendons à ce que some.system.key soit défini comme propriété système, et s'il n'est pas défini, nous souhaitons utiliser « ma valeur de propriété système par défaut» par défaut:

@Value("#{systemProperties['some.key'] ?: 'my default system property value'}") private String spelWithDefaultValue;

6. Conclusion

Dans cet article rapide, nous avons examiné comment nous pouvons définir une valeur par défaut pour une propriété dont nous aimerions avoir injecté la valeur à l'aide de l' annotation @Value de Spring .

Comme d'habitude, tous les exemples de code utilisés dans cet article se trouvent dans le projet GitHub.