我试图在构造函数的参数中使用@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) {
...
}
当属性文件出现在类路径中时,属性将被完美加载,并且测试可以正常执行。但是,当我从类路径中删除属性文件时,我曾希望会使用默认值,例如,将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}之类的符号应该可以使用。但这对我来说还没有发生!
谢谢
最佳答案
可能由于缺少属性文件而导致属性占位符配置程序初始化失败,因此无法解析占位符。您可以将其配置为忽略丢失的文件,如下所示(如果使用context
命名空间进行配置):
<context:property-placeholder ignore-resource-not-found="true" ... />
另外,您也不需要在默认值周围添加
"..."
。