---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
概述
1、JavaBean是一种特殊的Java类,其中的某些方法名字符合某种命名规则,如果一个Java类中的一些方法符合某种命名规则,则可以把它当作JavaBean来使用。一个JavaBean可以当做普通Java类来使用,但是一个普通Java类不一定可以当做JavaBean来使用。
2、JavaBean是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。
① 如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object,简称VO)。例如 订单信息等这些信息在类中用私有字段来存储,如果读取或设置这些字段的值,则需要通过一些相应的方法来访问,get和set方法。② JavaBean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。如果方法名为setId,中文意思即为设置id,至于你把它存到哪个变量上,用管吗?如果方法名为getId,中文意思即为获取id,至于你从哪个变量上取,用管吗?去掉set前缀,剩余部分就是属性名,如果剩余部分的第二个字母是小写的,则把剩余部分的首字母改成小的。
总之,一个类被当作javaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到java类内部的成员变量。示例如下:
setId()的属性名 id
isLast()的属性名 last
setCPU的属性名CPU
getUPS的属性名 UPS
3、一个符合JavaBean特点的类可以当作普通类一样进行使用,但把它当JavaBean用肯定需要带来一些额外的好处。在Java EE开发中,经常要使用到JavaBean;很多环境就要求按JavaBean方式进行操作;JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省;如果要你自己去通过getX方法来访问私有的x,用内省这套api操作JavaBean比用普通类的方式更方便。
对JavaBean的简单内省操作
PropertyDescriptor:描述 Java Bean 通过一对存储器方法导出的一个属性。
代码示例如下:import java.lang.reflect.*; import java.beans.PropertyDescriptor; import java.beans.BeanInfo; import java.beans.Introspector; class ReflectPoint{ private int x; private int y; ReflectPoint(int x,int y){ this.x=x; this.y=y; } public void setX(int x){ this.x=x; } public int getX(){ return x; } public void setY(int y){ this.y=y; } public int getY(){ return y; } } public class Demo3{ public static void main(String[] args) throws Exception{ ReflectPoint pt=new ReflectPoint(3,5); String propertyName="x"; PropertyDescriptor pd=new PropertyDescriptor(propertyName,pt.getClass()); System.out.println(pd.getName()); Method methodSetX=pd.getWriteMethod(); methodSetX.invoke(pt,9); Method methodGetX=pd.getReadMethod(); Object retVal=methodGetX.invoke(pt); System.out.println(retVal); } } //x //9
对JavaBean的复杂内省操作
Introspector类为通过工具学习有关受目标 Java Bean 支持的属性、事件和方法的知识提供了一个标准方法。
BeanInfo:接口,希望提供有关其 bean 的显式信息的 bean 实现者可以提供某个 BeanInfo 类,该类实现此 BeanInfo 接口并提供有关其 bean 的方法、属性、事件等显式信息。
示例代码如下:---------------------- ASP.Net+Android+IO开发S 、 .Net培训 、期待与您交流! ----------------------import java.lang.reflect.*; import java.beans.PropertyDescriptor; import java.beans.BeanInfo; import java.beans.Introspector; class ReflectPoint{ private int x; private int y; ReflectPoint(int x,int y){ this.x=x; this.y=y; } public void setX(int x){ this.x=x; } public int getX(){ return x; } public void setY(int y){ this.y=y; } public int getY(){ return y; } } public class Demo{ public static void main(String[] args) throws Exception{ ReflectPoint pt=new ReflectPoint(3,5); String propertyName="x"; PropertyDescriptor pd=new PropertyDescriptor(propertyName,pt.getClass()); System.out.println(pd.getName()); BeanInfo beanInfo=Introspector.getBeanInfo(pd.getClass()); PropertyDescriptor[] pds=beanInfo.getPropertyDescriptors(); Object retVal=null; for(PropertyDescriptor pdpd:pds){ if(pdpd.getName().equals(propertyName)){ Method method=pdpd.getReadMethod(); retVal=method.invoke(pt); break; } } } }