黑马程序员--高新技术(内省)

---------------------- 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 class user{。。。}

2,JavaBean类必须有一个空参数的构造函数,即类中必须有一个不带参数的公用构造器。

3,一个javaBean类不应该有公共成员变量,类变量都是private(私用的)。

 

如果有一个javaBean,我们知道它有一对setName和getName方法,但是我们不能肯定这个类中有name字段,至于是set和get中操作的是那一个字段,我们也不知道,我们只知道它会设置一个name或者返回一个name。

 


//获取

String propertyName "name";

PropertyDescriptor pd new PropertyDescriptor(propertyName, pt1.getClass());

Object retVal pd.getReadMethod().invoke(pt1);

System.out.println(retVal);

事实上,就是Bean工具帮我们在这个类中调用了它的方法。


//设置

Object val 76;

PropertyDescriptor pd new PropertyDescriptor(propertyName, pt1.getClass());

pd.getWriteMethod().invoke(pt1,val);

System.out.println(pt1.getX());

 

也可以使用工具!将来使用最多的!

Apache工具:BeanUtils和logging; 

BeanUtils以String形式设置,返回的也是String。

 

String propertyName "x";

System.out.println("BeanUtilsGet:"+BeanUtils.getProperty(pt1, propertyName));

Object val 76;

BeanUtils.setProperty(pt1, propertyName, val);

System.out.println("BeanUtilsSet:"+pt1.getX());

 

好处:

1,省去了类型转换的工作,返回的是String类型的。支持属性链exp:date.time:Date里面有一个setTime()和getTime()方法;所以Date也可以看作是JavaBean;

 

BeanUtils.setProperty(pt1, "date.time", "123456");

System.out.println("date.time:"+BeanUtils.getProperty(pt1, "date.time"));//似乎这里的大小写并不敏感。

System.out.println("PropertyUtils:"+PropertyUtils.getProperty(pt1, propertyName));

2,提供方法使JavaBean和Map可以相互转换。(因为Map和JavaBean很类似。)

 

JDK 7.0 的新特性:

Map map {name:"ahha",age:13};

 

将Map载入javaBean:利用BeanUtils的getProperty method。

 

PropertyUtils与BeanUtils的区别:

PropertyUtils传入参数的本身类型,返回原本返回的类型。BeanUtils进行了自行转换。但是PropertyUtils没有!

所以,当实际开发中使用BeanUtils转换出错时,可以使用PropertyUtils工具类(这是最快的解决方法),get属性时返回的结果为该属性本来的类型,set属性时只接受该属性本来的类型。

 

  

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值