Я пытаюсь использовать аннотацию @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} должна работать. Однако у меня это не работает!
Спасибо