Аннотация Spring @Value не использует значения по умолчанию, когда свойство отсутствует

Я пытаюсь использовать аннотацию @Value в параметрах конструктора следующим образом:

@Autowired
public StringEncryptor(
    @Value("${encryptor.password:\"\"}") String password,
    @Value("${encryptor.algorithm:\"PBEWithMD5AndTripleDES\"}") String algorithm,
    @Value("${encryptor.poolSize:10}") Integer poolSize, 
    @Value("${encryptor.salt:\"\"}") String salt) {
...
}

Когда файл свойств присутствует в classpath, свойства загружаются отлично и тест выполняется нормально. Однако когда я удаляю файл свойств из classpath, я ожидал, что будут использоваться значения по умолчанию, например, poolSize будет установлен на 10 или алгоритм PBEWithMD5AndTripleDES, однако это не так.

Запустив код через отладчик (который заработал только после изменения @Value("${encryptor.poolSize:10}") Integer poolSize на @Value("${encryptor.poolSize:10}") String poolSize, так как это вызывало NumberFormatExceptions), я обнаружил, что значения по умолчанию не устанавливаются, а параметры имеют вид:

poolSize = ${encryptor.poolSize:10} или

algorithm = ${encryptor.algorithm:"PBEWithMD5AndTripleDES"}

вместо ожидаемого

poolSize = 10 или

algorithm = "PBEWithMD5AndTripleDES"

Согласно SPR-4785 нотация типа ${my.property:myDefaultValue} должна работать. Однако у меня это не работает!

Спасибо

22
задан garyj 15 January 2011 в 07:49
поделиться