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

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. C'est également très utile pourprovide sensible defaults for cases where a property may not be present.

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

2. Valeurs par défaut de la chaîne

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;

Sisome.key ne peut pas être résolu, alorsstringWithDefaultValue sera défini sur la valeur par défaut de «my default value”.

De même, nous pouvons définir unString de longueur nulle comme valeur par défaut:

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

3. Primitives

Pour définir une valeur par défaut pour les types primitifs tels queboolean etint, 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 enBoolean etInteger.

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 «one”two” et «three” sont injectées par défaut dansstringArrayWithDefaults.

Dans le deuxième exemple, les valeurs1, 2, and 3 sont injectées par défaut dansintArrayWithDefaults.

5. Utiliser Spel

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

Dans l'exemple ci-dessous, nous nous attendons à ce quesome.system.key soit défini comme propriété système, et s'il n'est pas défini, nous voulons utiliser «my default system property value” 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@Valuede Spring.

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