/**
* 内省的简单应用
* @author sanch
*
*/
public class InstreSpectorTest {
public static void main(String[] args) throws IntrospectionException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
RefiectPoint pt1 = new RefiectPoint(3, 5);
String propertyName = "x";
// "x" --- >"X" --- > getX --- > MethodGetX--->
Object retVal = getProperty(pt1, propertyName);
System.out.println(retVal);
Object value = 7;
setProperty(pt1, propertyName, value);
System.out.println(pt1.getX());
}
private static void setProperty(Object pt1, String propertyName, Object value)
throws IntrospectionException, IllegalAccessException, InvocationTargetException {
PropertyDescriptor pd2 = new PropertyDescriptor(propertyName, RefiectPoint.class);
Method MethodSetX = pd2.getWriteMethod();
MethodSetX.invoke(pt1,value);
}
private static Object getProperty(Object pt1, String propertyName)
throws IntrospectionException, IllegalAccessException, InvocationTargetException {
/*PropertyDescriptor pd = new PropertyDescriptor(propertyName, RefiectPoint.class);
Method MethodGetX = pd.getReadMethod();
Object retVal = MethodGetX.invoke(pt1);*/
BeanInfo beanInfo = Introspector.getBeanInfo(pt1.getClass());
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
Object retVal = null;
for(PropertyDescriptor pd : pds ) {
if(pd.getName().equals(propertyName)) {
Method MethodGetX = pd.getReadMethod();
retVal = MethodGetX.invoke(pt1);
break;
}
}
return retVal;
}
}
BeanUtils.setProperty(pt1, "birthday.time", "111");// 为毫秒值
System.out.println(BeanUtils.getProperty(pt1, "birthday.time"));
PropertyUtils.setProperty(pt1, "x", 19);
System.out.println(PropertyUtils.getProperty(pt1, "x"));