---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
内省(IntroSpector):
JavaBean:JavaBean是一种特殊的Java类,这种类的共性是含有getter和setter,javaBean就是把这些共性抽象出来操作。主要用于访问私有的字段,且方法名符合某种命名规则。
如setId的属性名为:id
setCPI属性名为:CPI
相当于把类中的setter和getter当作这个类的属性访问。
如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象,这需要通过一些相应的方法来访问,则需要通过一些相应的方法来访问,JavaBean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的对象变量。如果方法名为setId,中文意思为设置id,至于你把它存到那个变量上,如果方法名为getId,中文意思为获取id,至于你从那个变量上获取,去掉set前缀,剩余部分就是属性名,如果剩余部分的第二个字母是小写的,则把剩余的布部分的字母改为小写。
总之,一个类被当作JavaBean使用时,JavaBean的属性是根据方法名推断出来的,java类内部的成员变量是不知道的。
注意:
1,JavaBean类必须是一个公共类,并将其访问属性设置为public,如:public
2,JavaBean类必须有一个空参数的构造函数,即类中必须有一个不带参数的公用构造器。
3,一个javaBean类不应该有公共成员变量,类变量都是private(私用的)。
如果有一个javaBean,我们知道它有一对setName和getName方法,但是我们不能肯定这个类中有name字段,至于是set和get中操作的是那一个字段,我们也不知道,我们只知道它会设置一个name或者返回一个name。
//获取
String
PropertyDescriptor
Object
System.out.println(retVal);
事实上,就是Bean工具帮我们在这个类中调用了它的方法。
//设置
Object
PropertyDescriptor
pd.getWriteMethod().invoke(pt1,val);
System.out.println(pt1.getX());
也可以使用工具!将来使用最多的!
Apache工具:BeanUtils和logging;
BeanUtils以String形式设置,返回的也是String。
String
System.out.println("BeanUtilsGet:"+BeanUtils.getProperty(pt1,
Object
BeanUtils.setProperty(pt1,
System.out.println("BeanUtilsSet:"+pt1.getX());
好处:
1,省去了类型转换的工作,返回的是String类型的。支持属性链exp:date.time:Date里面有一个setTime()和getTime()方法;所以Date也可以看作是JavaBean;
BeanUtils.setProperty(pt1,
System.out.println("date.time:"+BeanUtils.getProperty(pt1,
System.out.println("PropertyUtils:"+PropertyUtils.getProperty(pt1,
2,提供方法使JavaBean和Map可以相互转换。(因为Map和JavaBean很类似。)
JDK
Map
将Map载入javaBean:利用BeanUtils的getProperty
PropertyUtils与BeanUtils的区别:
PropertyUtils传入参数的本身类型,返回原本返回的类型。BeanUtils进行了自行转换。但是PropertyUtils没有!
所以,当实际开发中使用BeanUtils转换出错时,可以使用PropertyUtils工具类(这是最快的解决方法),get属性时返回的结果为该属性本来的类型,set属性时只接受该属性本来的类型。