JavaBeans

来源:互联网 发布:英剧安全屋剧情知乎 编辑:程序博客网 时间:2024/04/19 17:54

12.3 JavaBeans

1、简介

JavaBeans是一种特殊的Java类,是java软件组件模型的实现和规范,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则,

一个标准的JavaBeans组件具有以下特性:

⑴、它是一个公开的类、

⑵、它有一个默认的构造方法,也就是不带参数的构造方法;

⑶、它提供setXXX()方法和getXXX()方法来让外部程序设置和获取javaBean的属性。注意set方法没有返回值,get方法没有参数。

、它实现java.io.Serializable或者java.io.Externalizable接口,以支持序列化。
     如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object,简称VO)。这些信息在类中用私有字段来存储,如果读取或设置这些字段的值,则需要通过一些相应的方法来访问,大家觉得这些方法的名称叫什么好呢?JavaBean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。如果方法名为setId,中文意思即为设置id,至于你把它存到哪个变量上,用管吗?如果方法名为getId,中文意思即为获取id,至于你从哪个变量上取,用管吗?去掉set前缀,剩余部分就是属性名,如果剩余部分的第二个字母是小写的,则把剩余部分的首字母改成小的。
2、内省综合案例

publicclass IntroSpectorTest {

    privatestatic StringpropertyName;

    publicstaticvoidmain(String[] args)throws Exception {

        ReflectPoint pt = new ReflectPoint(1,5);

        propertyName ="x";

        //"x"-->"X"-->"getX"-->"MethodGetX"

       PropertyDescriptor pd =newPropertyDescriptor(propertyName,pt.getClass());

        Method methodGetX = pd.getReadMethod();

        Object retVal = methodGetX.invoke(pt);

        System.out.println(retVal);

       

       Method methodSetX = pd.getWriteMethod();

        methodSetX.invoke(pt,8);

       

        System.out.println(pt.getX());

        //采用遍历BeanInfo的所有属性方式来查找和设置某个ReflectPoint对象的x属性。在程序中把一个类当做javaBean来看 ,就是调用IntroSpector。getBeanInfo方法,得到的BeanInfo对象封装了把这个类当作javaBean看的结果信息。

        System.out.println(getProperty(propertyName,pt));  

    }

    privatestatic Object getProperty(StringpropertyName,ReflectPoint pt)

throws Exception {

        BeanInfo beanInfo = Introspector.getBeanInfo(pt.getClass());

        //获得所有属性

        PropertyDescriptor[] pds  = beanInfo.getPropertyDescriptors();

        Object retVal = null;

        for(PropertyDescriptor pd : pds) {

            if(pd.getName().equals(propertyName)) {

                MethodmethodGetX = pd.getReadMethod();

                retVal = methodGetX.invoke(pt);        

            }

        }

        return retVal;

    }

}

3、Beanutils工具包

⑴、Beanutils类可以对Javabean进行操作

BeanUtils.getProperty() ,

BeanUtils.setProperty(pt1,"x","9")

set里的X是int 但是我们Beanutils设置值的时候是用String类型设置进去的,返回也是String类型的。

⑵、PropertiesUtils类

PropertiesUtils.setProperty(pt1,"x",9);

  BeanUtils是以字符串的形式对javabean进行操作,而//PropertyUtils工具类传入的参数和拿出的参数必须和属性本身的类型一致,这是两者的区别。

⑶、利用BeanUtils工具实现JavaBean与Map的转换

      {

ReflectPointrp =new ReflectPoint(12,8);

Mapmap = BeanUtils.describe(rp);

         System.out.println(map);

         BeanUtils.setProperty(map,"name", "xx");

         System.out.println(map);

}

原创粉丝点击