Я отдаю должное @nosebrain, поскольку я не знал о «нулевом значении», но я предпочитаю вообще избегать использования нулевых значений, особенно из-за того, что его сложно представить null
в файле свойств.
Но вот альтернатива с использованием null без out, null-value
поэтому он будет работать с любым заполнителем свойств.
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;
}
}
Лично я предпочитаю свой способ, потому что, возможно, позже вы захотите stuff.value
использовать значение, разделенное запятыми, или, возможно, использовать Enum, переключение будет проще. Его также проще провести модульное тестирование :)
РЕДАКТИРОВАТЬ: на основе ваших комментариев об использовании перечислений и моего мнения об отказе от использования null.
@Component
public class MyObject {
@Value("${crap:NOTSET}")
private Crap crap;
public enum Crap {
NOTSET,
BLAH;
}
}
Вышеупомянутое отлично работает для меня. Вы избегаете null. Если ваши файлы свойств хотят явно указать, что они не хотят его обрабатывать, тогда вы это делаете ( но вам даже не нужно указывать это, поскольку по умолчанию он будет НЕ УСТАНОВИТЬ ).
crap=NOTSET
null
очень плохо и отличается от NOTSET
. Это означает, что пружина или модульный тест не установили его, поэтому ИМХО есть разница. Я бы по-прежнему, вероятно, использовал нотацию установщика (предыдущий пример), поскольку ее легче проводить в модульном тестировании (частные переменные трудно установить в модульном тесте).