gar*_*ryj 22 java spring annotations
我试图在构造函数的参数中使用@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) {
...
}
Run Code Online (Sandbox Code Playgroud)
当类路径中存在属性文件时,属性将完美加载并且测试执行正常.但是,当我从类路径中删除属性文件时,我原本期望使用默认值,例如poolSize将设置为10或算法设置为PBEWithMD5AndTripleDES但是情况并非如此.
通过调试运行代码(这只会改变工作后,@Value("${encryptor.poolSize:10}") Integer poolSize到@Value("${encryptor.poolSize:10}") String poolSize我发现的默认值没有被设置为这是造成NumberFormatExceptions)和参数的形式:
poolSize = ${encryptor.poolSize:10} 要么
algorithm = ${encryptor.algorithm:"PBEWithMD5AndTripleDES"}
Run Code Online (Sandbox Code Playgroud)
而不是预期的
poolSize = 10 要么
algorithm = "PBEWithMD5AndTripleDES"
Run Code Online (Sandbox Code Playgroud)
基于SPR-4785,$ {my.property:myDefaultValue}等符号应该有效.但它并没有发生在我身上!
谢谢
axt*_*avt 23
由于遗漏属性文件,属性占位符配置器的初始化可能会失败,因此不会解析占位符.您可以将其配置为忽略丢失的文件,如下所示(如果使用context命名空间进行配置):
<context:property-placeholder ignore-resource-not-found="true" ... />
Run Code Online (Sandbox Code Playgroud)
此外,您不需要"..."大约默认值.
小智 6
ignore-resource-not-found ="true"不需要拾取默认值.如果在任何地方找不到属性,则指定默认值的点是使用它.
我认为上一个答案中的最后一句话指的是问题 - 你必须最初提供的错误的EL,但后来从示例中删除了.您获得格式转换异常的事实也指向了这一点.通常,Spring会自动将字符串转换为适当的"标准"Java类型,如果您提供自己的Spring转换服务实现,也可以自定义您的自定义对象 - 只要您的转换服务在应用程序上下文中定义.
当您通过XML注入属性而没有默认值时,"ignore-resource-not-found"非常有用,并且如果没有找到属性,则不希望容器抛出实例化bean的异常.在这种情况下,bean属性将使用Java默认值进行初始化,例如,对象为null,原始数值为0,等等.
| 归档时间: |
|
| 查看次数: |
35337 次 |
| 最近记录: |