哪个Java库允许我从属性文件初始化对象的属性?

Kje*_*ard 3 java

是否有Java库可以让您将属性文件"反序列化"到对象实例中?

示例:假设您有一个名为init.properties的文件:

username=fisk
password=frosk
Run Code Online (Sandbox Code Playgroud)

和一个具有一些属性的Java类:

class Connection {

    private String username;
    private String password;

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想做这个:

Connection c = MagicConfigurator.configure("init.properties", new Connection())
Run Code Online (Sandbox Code Playgroud)

并让MagicConfigurator将属性文件中的所有值应用于Connection实例.

有一个像这样的类的图书馆吗?

sfu*_*ger 8

使用commons-beanutils非常简单.该库甚至可以处理类型转换.此外,您甚至可以设置嵌套对象和数组的属性.

public static void setProperties(Object bean, Properties properties) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
  for (Map.Entry<Object, Object> e : properties.entrySet()) {
    if (e.getKey() instanceof String) {
      BeanUtils.setProperty(bean, (String) e.getKey(), e.getValue());
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

例如,您可以使用如下所示的属性文件:

username=john
keys[0]=47
keys[1]=11
person.name=John
person.age=42
Run Code Online (Sandbox Code Playgroud)

钥匙和年龄会即时转换为数字.必须事先创建keys数组,对于Person也是如此.