一、使用java.beans.PropertyDescriptor
import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class PropertyUtil { private static final String SET_PREFIX = "set"; private static final String IS_PREFIX = "is"; private static final String GET_PREFIX = "get"; public static PropertyDescriptor getPropertyDescriptor(Class<?> clazz, String propertyName) {//根據需求,定制 自己的get和set方法 Method setMethod = null; Method getMethod = null; PropertyDescriptor pd = null; try { Field field = clazz.getDeclaredField(propertyName);// 根據字段名來獲取字段 if (field != null) { // 構建方法的后綴 String methodEnd = propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1); setMethod = clazz.getDeclaredMethod(SET_PREFIX + methodEnd, new Class[] { field.getType() }); // 構建get 方法 getMethod = clazz.getDeclaredMethod(GET_PREFIX + methodEnd, new Class[] {}); // 構建一個屬性描述器 把對應屬性 propertyName 的 get 和 set 方法保存到屬性描述器中 pd = new PropertyDescriptor(propertyName, getMethod, setMethod); } } catch (Exception ex) { ex.printStackTrace(); } return pd; } public static PropertyDescriptor getPropertyDescriptor2(Class<?> clazz, String propertyName) {//使用 PropertyDescriptor 提供的 get和set方法 try { return new PropertyDescriptor(propertyName, clazz); } catch (IntrospectionException e) { e.printStackTrace(); } return null; } public static void setProperty(Object obj, String propertyName, Object value) { Class<?> clazz = obj.getClass();// 獲取對象的類型 PropertyDescriptor pd = getPropertyDescriptor(clazz, propertyName);// 獲取 // clazz // 類型中的 // propertyName // 的屬性描述器 Method setMethod = pd.getWriteMethod();// 從屬性描述器中獲取 set 方法 try { setMethod.invoke(obj, new Object[] { value });// 調用 set // 方法將傳入的value值保存屬性中去 } catch (Exception e) { e.printStackTrace(); } } public static Object getProperty(Object obj, String propertyName) { Class<?> clazz = obj.getClass();// 獲取對象的類型 PropertyDescriptor pd = getPropertyDescriptor(clazz, propertyName);// 獲取 // clazz // 類型中的 // propertyName // 的屬性描述器 Method getMethod = pd.getReadMethod();// 從屬性描述器中獲取 get 方法 Object value = null; try { value = getMethod.invoke(clazz, new Object[] {});// 調用方法獲取方法的返回值 } catch (Exception e) { e.printStackTrace(); } return value;// 返回值 } }
二、使用收藏的一個工具類 BeanHelper
三、獲取一個類每個屬性的 PropertyDescriptor
org.springframework.beans.BeanUtils
PropertyDescriptor[] pds = BeanUtils.getPropertyDescriptors(mappedClass);
使用請參考 這里。