package com.mossle.core.util; import java.lang.reflect.Method; import java.util.Map; import java.util.Properties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class PropertiesUtils { private static Logger logger = LoggerFactory .getLogger(PropertiesUtils.class); protected PropertiesUtils() { } public static void bindProperties(Object object, Properties properties, String prefix) { if (properties == null) { throw new IllegalArgumentException( "there is no properties setting."); } logger.debug("prefix : {}", prefix); for (Map.Entry<Object, Object> entry : properties.entrySet()) { String key = (String) entry.getKey(); String value = (String) entry.getValue(); if (!key.startsWith(prefix)) { continue; } String propertyName = key.substring(prefix.length()); tryToSetProperty(object, propertyName, value); } } public static void tryToSetProperty(Object object, String propertyName, String propertyValue) { String setterName = ReflectUtils.getSetterMethodName(propertyName); Method[] methods = object.getClass().getMethods(); for (Method method : methods) { if (!method.getName().equals(setterName)) { continue; } Class[] parameterTypes = method.getParameterTypes(); if (parameterTypes.length != 1) { continue; } invokeMethod(object, method, parameterTypes[0], propertyValue); } } private static void invokeMethod(Object object, Method method, Class parameterType, String propertyValue) { logger.debug("match method : {}, {}", method, propertyValue); if (parameterType == String.class) { BeanUtils.safeInvokeMethod(object, method, propertyValue); } else if ((parameterType == Integer.class) || (parameterType == int.class)) { BeanUtils.safeInvokeMethod(object, method, Integer.parseInt(propertyValue)); } else if ((parameterType == Long.class) || (parameterType == long.class)) { BeanUtils.safeInvokeMethod(object, method, Long.parseLong(propertyValue)); } else if ((parameterType == Boolean.class) || (parameterType == boolean.class)) { BeanUtils.safeInvokeMethod(object, method, Boolean.valueOf(propertyValue)); } else { logger.info("cannot process parameterType : [" + parameterType + "]"); } } }