Dou crédito a @nosebrain porque não sabia sobre "valor nulo", mas prefiro evitar o uso de valores nulos, principalmente porque é difícil de representar null
em um arquivo de propriedades.
Mas aqui está uma alternativa usando null sem null-value
para que funcione com qualquer marcador de posição de propriedade.
public class MyObject {
private String value;
@Value("${stuff.value:@null}")
public void setValue(String value) {
if ("@null".equals(value)) this.value = null;
else this.value = value;
}
}
Pessoalmente, eu prefiro do meu jeito porque talvez mais tarde você queira stuff.value
ter um valor separado por vírgula ou talvez Enum a troca seja mais fácil. Também é mais fácil testar a unidade :)
EDITAR: com base em seus comentários sobre o uso de enums e minha opinião sobre não usar null.
@Component
public class MyObject {
@Value("${crap:NOTSET}")
private Crap crap;
public enum Crap {
NOTSET,
BLAH;
}
}
O acima funciona bem para mim. Você evita null. Se seus arquivos de propriedades desejam definir explicitamente que eles não querem lidar com isso, você o faz ( mas você nem mesmo precisa especificar isso, pois o padrão será NOTSET ).
crap=NOTSET
null
é muito ruim e é diferente de NOTSET
. Isso significa que o teste de primavera ou unidade não definiu, é por isso que há diferença IMHO. Eu provavelmente ainda usaria a notação setter (exemplo anterior) porque é mais fácil de testar a unidade (variáveis privadas são difíceis de definir em um teste de unidade).