Usando Spring @Value com padrões

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.