Usando Spring @Value com padrões
1. Visão geral
A anotação@Value de Spring fornece uma maneira conveniente de injetar valores de propriedade em componentes. Também é bastante útil paraprovide sensible defaults for cases where a property may not be present.
Isso é o que vamos nos concentrar neste artigo - como especificar um valor padrão para a anotação@Value Spring. Para um guia rápido mais detalhado sobre@Value, consulte o artigohere.
2. Padrões de string
Vejamos a sintaxe básica para definir um valor padrão para uma propriedadeString:
@Value("${some.key:my default value}")
private String stringWithDefaultValue;
Sesome.key não puder ser resolvido, entãostringWithDefaultValue será definido com o valor padrão de “my default value”.
Da mesma forma, podemos definir um comprimento zeroString como o valor padrão:
@Value("${some.key:})"
private String stringWithBlankDefaultValue;
3. Primitivas
Para definir um valor padrão para tipos primitivos, comobooleaneint, usamos o valor literal:
@Value("${some.key:true}")
private boolean booleanWithDefaultValue;
@Value("${some.key:42}")
private int intWithDefaultValue;
Se quiséssemos, poderíamos usar wrappers primitivos alterando os tipos paraBooleaneInteger.
4. Matrizes
Também podemos injetar uma lista de valores separados por vírgula em uma matriz:
@Value("${some.key:one,two,three}")
private String[] stringArrayWithDefaults;
@Value("${some.key:1,2,3}")
private int[] intArrayWithDefaults;
No primeiro exemplo acima, os valores “one”,“two” e “three” são injetados como padrões emstringArrayWithDefaults.
No segundo exemplo, os valores1, 2, and 3 são injetados como padrões emintArrayWithDefaults.
5. Usando o SpEL
Também podemos usar o Spring Expression Language (SpEL) para especificar uma expressão e um padrão.
No exemplo abaixo, esperamos quesome.system.key seja definido como uma propriedade do sistema e, se não for definido, queremos usar “my default system property value” como padrão:
@Value("#{systemProperties['some.key'] ?: 'my default system property value'}")
private String spelWithDefaultValue;
6. Conclusão
Neste artigo rápido, vimos como podemos definir um valor padrão para uma propriedade cujo valor gostaríamos de ter injetado usando a anotação@Value do Spring.
Como de costume, todos os exemplos de código usados neste artigo podem ser encontrados emthe GitHub project.