在Spring中,如何使用配置中的默认值创建POJO?

时间:2016-07-21 11:55:45

标签: java spring

我正在使用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

1 个答案:

答案 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");
}