Связыватель объекта на основе отражения для java.util.Properties? - PullRequest
1 голос
/ 25 июня 2011

Я хотел бы автоматически связать свойства из экземпляра 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 ]

1 голос
/ 13 октября 2012

Если вы просто хотите установить значения String, это подойдет (вам не нужна сторонняя библиотека):

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, пико-контейнер или инструмент, который я поддерживаю по имени InPUT .

1 голос
/ 25 июня 2011

BeanUtils.populate(object, map)

Properties extends Hashtable implements Map, поэтому вы можете использовать его в вышеуказанном методе.

0 голосов
/ 27 июня 2011

Переплет недвижимости: http://pholser.github.com/property-binder

0 голосов
/ 25 июня 2011

Если вы делаете вещи типа конфигурации, взгляните на config-magic , которая позволяет вам использовать аннотации для сопоставления свойств конфигурации с получателями бинов.

...