反射技术实际是已经能够完全满足我们对javaBean的各种操作了,但是为了方便JDK还是为我们提供了一套操纵JavaBean的API,我们称这套API为内省操作(Introspector),下面示范一下通常的两种内省操作.
既然内省是作用于javaBean的,那么我们先提供一个JavaBean类,本例为UserBean.java
[java] view plaincopy
package net.csdn.blog;
public class UserBean {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
第一种方法为较繁琐的一种方法,但通常在批量操纵javaBean中的方法时很管用。
[java] view plaincopy
package net.csdn.blog;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class UserBeanHandlerOne {
public static void main(String args[]) {
UserBean user = new UserBean();
try {
handleBean(user);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void handleBean(UserBean user)
throws IntrospectionException, IllegalArgumentException,
IllegalAccessException, InvocationTargetException {
BeanInfo bi = Introspector.getBeanInfo(user.getClass());
PropertyDescriptor[] pd = bi.getPropertyDescriptors();
for (PropertyDescriptor p : pd) {
String attrName=p.getName();
if(attrName.equals("name")||attrName.equals("age")){
Method writeMethod=p.getWriteMethod();//得到set方法
Class clazz[]=writeMethod.getParameterTypes();
if(clazz[0]==int.class)
writeMethod.invoke(user, 20);
else
writeMethod.invoke(user, "peter");//执行set方法
Method readMethod = p.getReadMethod();//获取get方法
Object obj = readMethod.invoke(user);//执行get方法
System.out.println(obj);
}
}
}
}
第二种方法是对于某个特定的属性
[java] view plaincopy
package net.csdn.blog;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class UserBeanHandlerTwo {
public static void main(String args[]) throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{
UserBean ub=new UserBean();
PropertyDescriptor pd=new PropertyDescriptor("name",UserBean.class);
Method writeMethod=pd.getWriteMethod();
writeMethod.invoke(ub,"peter");
Method readMethod=pd.getReadMethod();
Object str=readMethod.invoke(ub);
System.out.println(str);
}
}
这两种方法均可以用来作为javaBean的内省操作 |