---------------------- android培训、java培训、期待与您交流! ----------------------
内省(IntroSpector):
主要对javabean进行操作
方法的名称符合某种特定的规则的一种java类我们称之为javabean
javabean名称的属性是根据方法推断来的,去掉前缀剩下来的(如:getAge-->age)
gettime-->time
setTime-->time
getCPU-->CPU
它根本看不到java类内部的成员变量。
特点:
1,JavaBean类必须是一个公共类,并将其访问属性设置为public,如:public class user{。。。}
2,JavaBean类必须有一个空参数的构造函数,即类中必须有一个不带参数的公用构造器。
3,一个javaBean类不应该有公共成员变量,类变量都是private(私用的)。
虽然我们可以通过反射获得类中的属性值,但是JavaBean可以为我们带来一些好处:
1.简化获取:
PropertyDescriptor::Bean的一个子类;描述 JavaBean 通过一对存储器方法导出的一个属性。
也可是使用BeanInfo Method(遍历);
BeanInfo代表某个类的整个JavaBean。
ReflectPoint pt1 = new ReflectPoint(2, 3);
内省的简单应用
获取值
private static Object getProperty(Object pt1, StrinpropertyName)
throws IntrospectionException, IllegalAccessException,
InvocationTargetException {
PropertyDescriptor pd = new PropertyDescriptor(propertyName,pt1.getClass());
Method methodGetX = pd.getReadMethod();
Object retVal = methodGetX.invoke(pt1);
return retVal;
}
设置值
private static void setProperties(Object pt1, StringpropertyName,
Object value) throws IntrospectionException,IllegalAccessException,
InvocationTargetException {
PropertyDescriptor pd2 = new PropertyDescriptor(propertyName,pt1.getClass());
Method methodSetX = pd2.getWriteMethod();
methodSetX.invoke(pt1,value);
}
使用工具
Apache工具:BeanUtils和logging;
BeanUtils以String形式设置,返回的也是String。
好处:
1,省去了类型转换的工作,返回的是String类型的。支持属性链!!一级一级访问!!exp:date.time
2,提供方法使JavaBean和Map可以相互转换。(因为Map和JavaBean很类似。)
---------------------- android培训、java培训、期待与您交流! ----------------------