是否有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实例.
有一个像这样的类的图书馆吗?
使用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也是如此.