-------android培训、java培训、期待与您交流! ----------
一、什么是内省(Introspector),如何了解JavaBean
内省,字面意思就是内窥,内部检查。在Java中代表了解更多的底层细节。主要作用于对Javabean进行操作。
那么,JavaBean是什么?
JavaBean:是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法符合某种命名规则。
例如类A中有属性name, 那我们可以通过getName,setName来得到其值或者设置新的值。通过 getName/setName来访问name属性,这就是默认的规则。Java 中提供了一套API用来访问某个属性的getter/setter方法,通过这些API可以使你不需要了解这个规则(但你最好还是要搞清楚),这些API存放于包java.beans中,一般的做法是通过类Introspector的getBeanInfo方法来获取某个对象的BeanInfo信息,然后通过BeanInfo来获取属性的描述器(PropertyDescriptor),通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后我们就可以通过反射机制来调用这些方法。
如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object,简称VO),因为这些bean中通常只有一些信息字段和存储方法,没有功能性方法。
JavaBean通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。众所周知,属性名称符合这种模式,其它Java类可以通过自身机制发现和操作这些JavaBean属性。
通俗理解就是,这些信息在类中用私有字段来存储,如果读取或者设置这些字段的值,则需要通过一些相应的方法来访问。JavaBean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。如果方法名为setId,中文意思即为设置id,至于你把它存到哪个变量上,不需要知道!去掉set前缀,剩余部分是属性名,如果剩余部分的第二个字母是小写的,则把剩余部分的首写字母改成小的。下面举个例子:
setId()的属性名->id
isLast()的属性名->last
setCPU的属性名->CPU
getUPS的属性名->UPS
总之,一个JavaBean类可以当成普通类用,但是一个java类不一定能当做JavaBean。因为JavaBean实际就是一种规范,当一个类满足这个规范,这个类就能被其它特定的类调用。一个类被当作JavaBean使用时,JavaBean的属性是根据方法名推断出来的,根本看不到Java类内部的成员变量。
一个符合JavaBean特点的类可以当作普通类一样进行使用,但把它当作JavaBean用肯定需要带来一些额外的好处,我们才会去了解和应用JavaBean!好处如下:
在Java EE开发中,经常要使用JavaBean。很多环境就要求按JavaBean方式进行操作,别人都这么用和要求这么做,那你就没什么选择的余地!
JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省。如果要你自己去通过getX方法来访问私有的,怎么做,有一定难度吧?用内省这套API操作JavaBean比用普通类的方式更方便,提高代码重用性,提高开发效率。
二、JavaBean的特点
JavaBean有三个特性:
1、javaBean必须是一个具体的public的类
2、JavaBean有一个不带参数的构造函数,如果public类的构造函数包含参数的话,那这个类不能做为JavaBean
3、JavaBean通过 getProperty获取属性,通过setProperty设置属性