我正在使用Spring框架来使用具有密钥的属性文件:
empty.value = -
我希望能够创建一个POJO,它将该空值作为POJO默认构造函数的默认值。像这样:
public class Dog {
private String name;
public Dog(){
}
public Dog(String name){
this.name = name;
}
}
因此,如果Dog d = new Dog()
被调用,则d.name
将来自-
密钥{。}}。
自动装配empty.value
变量只是name
,因为Spring不知道POJO以及使用null
。
实现这一目标的最佳方式是什么?
修改:为了澄清,整个系统中有许多@Value("${empty.value}")
,我需要能够根据请求初始化它们。
编辑2 :考虑以下用例 - 我有一个包含方法的界面:
Dog
我希望能够知道,从transform方法返回的任何Dog transform(List<String> animals);
都有Dog
(可配置)作为-
或传递给构造函数的不同值什么时候创建(或者setter,稍后)。我想确保无论name
在任何实现中做什么,即使它失败了,我也会有一个transform
的有效Dog
。
答案 0 :(得分:2)
如果您使用的是Spring框架,则必须使用Spring创建所有Spring bean。例如:
Dog d = (Dog)context.getBean("dog");
执行Dog d = new Dog()
是一个有效的实例,但这样就不会被Spring处理。
有关编辑2的更新
如果要确保在调用transform
方法时始终拥有有效的dog实例,则可以在调用者代码中使用try catch
块。例如:
// caller class
Dog dog = null;
try{
dog = yourInterface.transform(animals);
if (dog == null || !validName(dog.name)){
throw new RuntimeException("Not a valid dog/name");
}
}catch(Exception ex){
dog = (Dog)context.getBean("dog");
}