黑马程序员技术交流社区
标题:
javabean的内省操作
[打印本页]
作者:
未知数|X|
时间:
2013-10-20 08:32
标题:
javabean的内省操作
本帖最后由 未知数|X| 于 2013-10-20 12:31 编辑
谁知道javabean的内省操作有什么具体作用,搞那么复杂就为了获取方法,我直接调用不就完了
作者:
龏鈊づ廱鵆ぐ
时间:
2013-10-20 11:02
反射技术实际是已经能够完全满足我们对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的内省操作
作者:
张俊生
时间:
2013-10-20 11:05
龏鈊づ廱鵆ぐ 发表于 2013-10-20 11:02
反射技术实际是已经能够完全满足我们对javaBean的各种操作了,但是为了方便JDK还是为我们提供了一套操纵Jav ...
很详细啊,顶一个
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2