java内省
操作javaBean
javaBean:
package com.test;
public class Person {
private String uname;
private String passd;
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getPassd() {
return passd;
}
public void setPassd(String passd) {
this.passd = passd;
}
public Person(String uname, String passd) {
super();
this.uname = uname;
this.passd = passd;
}
}
原始内省操作
Person person = new Person("hehe", "123");
BeanInfo beanInfo = Introspector.getBeanInfo(Person.class);
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
MethodDescriptor[] descriptors2 = beanInfo.getMethodDescriptors();
for (MethodDescriptor descriptor : descriptors2) {
Method method = descriptor.getMethod();
if(method.getName().indexOf("set")!=-1)
method.invoke(person, "456");
else if(method.getName().indexOf("get")!=-1)
System.out.println(method.invoke(person));
}
for (PropertyDescriptor ps : propertyDescriptors) {
String displayName = ps.getDisplayName();
}
更方便的内省操作:
Person person = new Person("hehe", "123");
PropertyDescriptor pd=new PropertyDescriptor("passd",Person.class );
Method mtGetPassd = pd.getReadMethod();
Object invoke = mtGetPassd.invoke(person);
System.out.println(invoke);
Method mtSetPass= pd.getWriteMethod();
mtSetPass.invoke(person, "456");
Method mtGetPassd2 = pd.getReadMethod();
Object invoke2 = mtGetPassd2.invoke(person);
System.out.println(invoke2);
原理:
通过反射,找到JavaBean,操作封装元素的get,set方法,获取或改变JavaBean的值