黑马程序员--07.JavaBean--01【JavaBean】【JavaBean的简单操作】

来源:互联网 发布:cn域名一定要备案吗 编辑:程序博客网 时间:2024/05/05 22:55

JavaBean----1

JavaBean基本概念        JavaBean简单操作

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------

1.    JavaBean基本概念

(1). JavaBean定义

[1]. 一个Java类中,如果含有某些方法get/set开头,并且访问权限public,则这样的Java类成为JavaBean类。

[2]. JavaBean的set/get方法是供外界调用的。

[3]. JavaBean的作用:用于外界传递信息

[4]. 在Java EE环境中,很多环境需求使用JavaBean的方式来操作类。

(2). JavaBean特征

[1].方法名符合某种规则java类就可以看做JavaBean,是一种特殊的Java类。

[2]. 可以对一个JavaBean作为普通的Java进行常规的处理么?

       可以。可以使用传统的new手段处理,也可以使用反射技术进行处理。

[3]. 一个普通的Java类,可以当做JavaBean来处理么?

       不一定!如果这个类的方法含有某个私有属性的Getter和Setter,就可以当做JavaBean来处理。否则是不可以的。

(3). 通过JavaBean的方法名推断JavaBean的属性名

[1]. step1 去掉JavaBean中方法名get/set前缀

[2]. step2 剩余部分的跟在首字母的第二个字母是小写,那就将方法名剩余部分大写的首字母改为小写便推断出这个JavaBean含有的一个属性。

【注意】如果剩余部分的跟在首字母的第二个字母也是大写,这个时候,上面的第二步省去,去掉set/get前缀之后的剩余部分就是这个JavaBean的属性

e.g. 某个JavaBean的方法名setAge( )  ----> 去掉set 获得Age ( A后的g小写) ---->age

       所以,age就是这个JavaBean类的一个属性

       某个JavaBean的方法名getCPU( ) ----> 去掉get 获得CPU ( C后的P仍是大写)--->CPU就是这个JavaBean类的属性

(4). boolean类型的属性的setter和getter

如果一个属性是boolean类型变量,它的getter按照JavaBean规定的标准写成isXxx【来替代getXxx】。

替代的原因就是:boolean类型的属性的getter返回值一定是boolean类型的,那么boolean语义本身就表示is( true ) oris not( false)。所以使用isXxx替代getXxx更符合语义

【举例】以下是由MyEclipse自动生成的一个boolean属性的setter和getter。getter由isXxx来取代

public class ReflectPointII {    boolean b;     // isB()替代getB()    public boolean isB() {       return b;    }     public void setB(boolean b) {       this.b = b;    }}

2.    JavaBean简单内省操作

1). JavaBean应用的场景和值对象

[1]. 如果两个模块之间需要传递信息,可以将要传递信息封装到一个自定义JavaBean类中。

[2]. 值对象 (Value Object) :用于为模块间传递信息的JavaBean类的对象称为值对象

{1}. 需要传递的信息用JavaBean类对象中的私有字段进行存储

{2}. 通过这些私有字段对应的公有权限setter和getter对这些字段进行设置和读取

2). PropertyDescriptor类

(1). PropertyDescriptor类基本知识

[1]. 所在的包:PropertyDescriptor类位于java.beans包。

[2]. 中文名属性描述符

[3]. java.beans.PropertyDescriptor描述的事物

PropertyDescriptor类描述了一个JavaBean通过一对访问符方法[指的是私有属性的setter和getter] 对外暴露的属性

【总结】PropertyDescriptor是对JavaBean类中的属性抽象

(2). PropertyDescriptor类中构造方法+常用的方法

[1]. 构造方法

publicPropertyDescriptor(String propertyName, Class<?> beanClass);

{1}. 输入参数1:String propertyName 是String类型属性名

{2}. 输入参数2:Class<?> beanClass 代表参数1属性名所属的

{3}. 构造功能描述:为一个遵循Java标准约定(有对应的settergetter)属性构建一个PropertyDescriptor类对象。

[2]. 普通方法

对一个非final的JavaBean类的属性,所做的操作无非是设置属性的值或者获取属性的值

{1}. 获取用于读取属性的方法

public synchronizedMethod getReadMethod();

【注意】如果相应的属性不可getReadMethod()方法返回null

{2}. 获取用于设置属性的方法

public synchronized Method getWriteMethod();

【注意】如果相应的属性不可getWriteMethod()方法返回null

技巧getReadMethod( )和getWriteMethod( )返回值类型都是Method,标志着获取到相应的方法之后,可用反射的方式的来操作这个方法。

(3). 使用PropertyDescriptor类对象读写指定 属性

[1]. 示例JavaBean代码

public class Bean {    private int x;    private String str;    public Bean(int x, String str) {       super();       this.x = x;       this.str = str;    }     public int getX() {       return x;    }    public void setX(int x) {       this.x = x;    }    public String getStr() {       return str;    }    public void setStr(String str) {       this.str = str;    }       public void setFlag(boolean flag) {       this.flag = flag;    }}

[2]. 测试PropertyDescriptor代码

示例代码

//获取字段值的方法private static Object getProperty(Object javaBean, String propertyName)       throws IntrospectionException,IllegalAccessException,       InvocationTargetException{    PropertyDescriptorpd =new PropertyDescriptor(propertyName,javaBean.getClass());    MethodmethodGetX =pd.getReadMethod();    ObjectretVal =methodGetX.invoke(javaBean, null);    return retVal;} 

private static void setProperty(Bean javaBean, String propertyName,String setValue) throws IntrospectionException,IllegalAccessException, InvocationTargetException {PropertyDescriptor pd =new PropertyDescriptor(propertyName, Bean.class);Method methodSet =pd.getWriteMethod();methodSet.invoke(javaBean,setValue);}


【测试代码】

//实例化JavaBean  --- 传统new的方式Bean javaBean =new Bean(1, "Benjamin"); //获取privat int x;的属性值String propertyName ="x";Object retVal = getProperty(javaBean,propertyName);System.out.println("获取属性 x 的取值:"+ retVal); //获取privat String str;的属性值propertyName ="str";retVal =getProperty(javaBean, propertyName);System.out.println("获取属性 str 的取值:"+ retVal); //设置privat String str;的属性值 String setValue ="BenStr";setProperty(javaBean, propertyName,setValue); //获取修改之后的str属性值retVal =getProperty(javaBean, propertyName);System.out.println("获取修改之后属性 x 的取值:"+ retVal); 

打印结果:


注意涉及到对boolean类型的成员变量进行获取读属性的方法的时候,方法里面使用isXxx或者getXxx都可以,PropertyDescriptor的getReadMethod( )都能正确返回相应的方法。

[3]. 使用PropertyDescriptor类获取没有setter或者getter字段时候,会抛出异常:


----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------

 

原创粉丝点击