基于反射的java.util.Properties对象绑定器?

时间:2011-06-25 13:49:15

标签: java reflection javabeans

我想自动将java.util.Properties实例中的属性绑定到对象中的字段。

优先选择:

Properties props = ... // has for instance the property "url=http://localhost:8080
MyType myType = ...
PropertiesBinder.bind(props, myType);
assertEquals("http://localhost:8080", myType.getUrl());

推出自己的并不难,但我想知道是否有人已经这样做了?

4 个答案:

答案 0 :(得分:1)

BeanUtils.populate(object, map)

Properties extends Hashtable implements Map,因此您可以在上述方法中使用它。

答案 1 :(得分:1)

如果您只想设置字符串值,这样做(您不需要第三方库):

public static void bind(Properties props, Object obj) throws Exception {
    Field field;
    Class<?> cLass = obj.getClass();
    for (String prop : props.stringPropertyNames()) {
        try {
            field = cLass.getDeclaredField(prop);
            if (field.getType().equals(String.class)) {
                if (!field.isAccessible())
                    field.setAccessible(true);
                field.set(obj, props.get(prop));
            }
        } catch (NoSuchFieldException e) {
            System.err.println("no luck");
        }
    }
}

对于高级内容,我建议使用首选项API,guice,spring,pico容器或我按名称InPUT维护的工具。

答案 2 :(得分:0)

如果您正在进行配置类型的事情,请查看config-magic,它允许您使用注释将配置属性映射到bean getter。

答案 3 :(得分:0)