黑马程序员_java基础加强之(内省)

来源:互联网 发布:查看监听端口命令 编辑:程序博客网 时间:2024/05/22 10:36

---------------------- 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培训、期待与您交流! ----------------------

原创粉丝点击