由内省引出JavaBean的讲解

IntroSpector--内部检查,了解更多细节--内省---JavaBean

一、JavaBean

  • JavaBean是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用户访问私有的字段,且方法名符合某种命名规则。
  • 如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object ,简称VO)。

这些信息学在类中用私有字段来存储,如果读取或者设置这些字段的值,这需要通过一些相应的方法来访问,大家觉得这些方法的名字叫什么好呢?

JavaBean的属性石根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。如果方法名为setId,中文意思即为设置id,值域你把它存在哪个

变量上,用管吗?如果方法名为getId,中文意思即为获取id,至于你从哪个变量上取,用管吗?去掉set前缀,剩余部分就是属性名,如果剩余部分的第二个

字母是小写的,则把剩余部分的首字母改成小的。

    • setId()的属性名—>id
    • isLast()的属性名—>last
    • setCPU()的属性名—>CPU
    • getUPS()的属性名—>UPS

总之,一个类被当做JavaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到java类内部的成员变量。

  • 一个符合JavaBean特点的类可以当做一个普通类一样进行使用,但把它当JavaBean用肯定需要带来一些额外的好处,我们才会去了解和应用JavaBean!

好处如下:

    • 在Java EE开发中,经常要使用到JavaBean。很多环境就要求按JavaBean方式进行操作,别人都这么用和要求这么做,哪里就没有挑选的余地!
    • JDK中提供了对JavaBean进行操作的一些API,这套API就成为内省。得到如果要你自己去通过getX方法来访问私有的x,怎么做,有一定难度吧?

用内省这套api操作JavaBean比用普通类的方式更方便。

 

 

二、内省综合案例

  • 演示用eclipse自动生成ReflectPoint的setter和getter方法。
  • 直接new一个PropertyDescriptor对象的方式来让大家了解JavaBean API的价值,先用一段代码读取JavaBean的属性,然后在用一段代码设置JavaBean的属性。
package com.itcast.day2;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;

import com.itcast.day1.ReflectPoint;
public class IntroSpectorTest {

    public static void main(String[] args) throws Exception{

        ReflectPoint rf1=new ReflectPoint(3,4);

        String propertyName="x";

        //如果不使用JavaBean API,则需要通过反射手动一步一步做,步骤为:  01."x"-->02."X"-->03."getX"-->04.MethodGetX-->

        //读
        PropertyDescriptor pd=new PropertyDescriptor(propertyName, rf1.getClass());
        Method methodGetX=pd.getReadMethod();//使用JavaBean API 至此,已经完成了 01、02、03、04,显然方便很多
        Object retVal=methodGetX.invoke(rf1);
        System.out.println(retVal);

        //写
        Object value=6;
        PropertyDescriptor pd2=new PropertyDescriptor(propertyName, rf1.getClass());
        Method methodSetX=pd.getWriteMethod();//使用JavaBean API 至此,已经完成了 01、02、03、04,显然方便很多
        methodSetX.invoke(rf1,value);
        System.out.println(rf1.getX());
    }

}

  • 演示用eclipse将读取属性和设置属性的流水账代码分别抽取成方法:

    • 只要调用这个方法,并给这个方法传递一个对象、属性名和设置值,它就能完成属性修改的功能。
    • 得到BeanInfo最好采用”obj.getClass()”方式,而不要采用”类名.class”方式,这样程序更通用。

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

//获得属性值得两种方式

public static Object getProperty(Object rf1,
            String propertyName) throws IntrospectionException,
            IllegalAccessException, InvocationTargetException {

        //①现在的方式--简捷,好!O(∩_∩)O~~
        /*PropertyDescriptor pd=new PropertyDescriptor(propertyName, rf1.getClass());
        Method methodGetX=pd.getReadMethod();
        Object retVal=methodGetX.invoke(rf1);*/

        //②最早的方式--遍历查找,较麻烦 ̄へ ̄
        Object retVal=null;
        BeanInfo beanInfo=Introspector.getBeanInfo(rf1.getClass());
        PropertyDescriptor[] pds=beanInfo.getPropertyDescriptors();
        for(PropertyDescriptor pd:pds){
            if(pd.getName().equals(propertyName)){
                Method methodGetX=pd.getReadMethod();
                retVal=methodGetX.invoke(rf1);
                break;
            }
        }
        return retVal;
    }

时间: 2024-08-02 13:24:45

由内省引出JavaBean的讲解的相关文章

内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包、注解、Rentention、Target、注解的基本属性和高级属性

内省.JavaBean.PropertyDescriptor类.Introspector类.BeanUtils工具包.注解.Rentention.Target.注解的基本属性和高级属性 本文转载自:http://blog.sina.com.cn/s/blog_5d65a16901011kom.html 关键字:内省.JavaBean.PropertyDescriptor类.Introspector类.BeanUtils工具包.注解.Rentention.Target.注解的基本属性和高级属性 内

内省(introspector)------>JavaBean

内省(introspector)------>JavaBean    1.问什么要学内省?        开发框架时,经常需要Java对象的属性来来封装程序的数据,每次使用反射技术完成此操作过于麻烦,所以SUN        公司开发了一套API,专门操作Java对象的属性    2.什么是JavaBean和属性的读写方法?    3.通过内省技术访问(Java.beans包提供了内省的API)JavaBean的两张方式        贱人 小婊砸 矫情 &.通过introspector类获

内省操作javabean的属性

1 import java.beans.BeanInfo; 2 import java.beans.IntrospectionException; 3 import java.beans.Introspector; 4 import java.beans.PropertyDescriptor; 5 import java.lang.reflect.Method; 6 7 import org.junit.Test; 8 9 //使用内省api操作bean的属性 10 public class D

内省、JavaBean

1. JavaBean是一个特殊的Java类. 主要用于传递数据信息,这种java类中的方法用于访问私有的字段,且方法名符合某种命名规则. 如果在2个模块之间传递多个信息,可以将这些信息封装在一个JavaBean 中. 这种Javabean对象通常称为值对象.这些信息在类中用私有字段来存储,如果读取或者设置 这些字段的值,需要通过相应的 set . get 方法来. 当一个类被当作Javabean来使用时,它的属性是根据方法名推断出来的,根本看不到java类内部的成员变量. javabean的好

内省 操作javaBean

一.什么是javaBean 二. 操作javaBean的意义 三.如何操作javaBean 四.使用BeanUtils 操作javaBean

Java重要技术(12)内省之JavaBean

1.1. Java Bean Java Bean是一种符合特定的规则的类.至少符合以下规则: (1)类本身是public修饰的. (2)类具有public无参数构造函数. (3)类通过某种规范化的getXXX()和setXXX()方法来暴露其属性XXX. 主要细则: (a)属性一般为private,而get和set方法为public. (b)属性名的第1个字母转化为大写后在前面加上get和set,就是该属性的get和set方法名称.属性XXX对应方法为getXXX(),setXXX().属性xy

高新技术---内省、注解、类加载器

第一讲     内省引出JavaBean 一.内省 1.内省对应的英文单词为IntroSpector,英文意思是检查.视察.体检之意,对于程序即对内部进行检查,了解更多的底层细节. 2.内省的作用:主要针对JavaBean进行操作. 二.JavaBean 1.简述: 1)JavaBean是一种特殊的Java类,主要用于传递数据信息,这种Java类中的方法主要用于访问私有的字段,且方法符合某种特殊的命名规则. 2)它是一种特殊的Java类,其中的方法符合特殊的规则.只要一个类中含有get或is和s

使用内省的方式操作JavaBean

[java] view plain copy import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * 使用内省的方式操作JavaBean */ public class IntroSpectorTest { publi

JDK1.5的新特性:javabean、注解类、类加载器

关于Java基础的文章,我觉得写得还可以,以前发在了我其它的博客了,肯定是原创,现在再分享给大家出来. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------