黑马程序员--内省JavaBean

      

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

 

 

                                内省--〉了解JavaBean

内省对应的单词为IntroSpector主要是对JavaBean进行操作

什么叫JavaBean?

 JavaBean是一个特殊的Java类,这个特殊的Java类里的某些方法,符合某种特定的命名规则,
如果一个Java类中的一些方法符合某种命名规则,则可以把它当作JavaBean来使用

问题:我们可不可以把JavaBean就当作是一个普通的Java类对它进行编程,进行操作?
 可以,反正是一个Java类,那么我就new它,用反射操作它。

问题:我们可不可以把Java类当作JavaBean来使用?、
 不一定,我们要看,它有没有get,和set方法,如果有,我就可以把它当作JavaBean来操作


一个类,如果它的有些方法是以set和get打头那么我们就可以把它当作JavaBean来使用

class Person{
 private int age;

 public void setAge(int age){
  this.age=age;
 } 
 public int getAge(){
  return age;
 }
}


JavaBean的方法名去掉set和get剩下来的就是属性名

Age-->如果第二个字母是小的,则把第一个字母变成小的-->

gettime-->time
setTime-->time
getCUP-->CPU


对JavaBean的简单内省操作:


一个符合JavaBean特点的类可以当作普通类进行使用,但把它当JavaBean用肯定需要带来一些额外的好处,
 我们才会去了解和应用JavaBean,好处如下:

 1.在JavaEE开发中,经常要使用到JavaBean。很多环境就要求按JavaBean方式进行操作,别人
   都这么用和要求这么做,那你就没什么挑选的余地!
 2.JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省。如果要你自己去通过getX方法来
   访问私有的x,怎么做?用内省这套api操作JavaBean比用普通类的方式更方便。


在MyEclipse中生成get和set方法的快捷键:
 Alt+Shift+s   R

 


//创建一个point类
public class Point {
 private int x;
 private int y;
  
 public Point(int x, int y) {
  this.x = x;
  this.y = y;
 }
 public int getX() {
  return x;
 }
 public void setX(int x) {
  this.x = x;
 }
 public int getY() {
  return y;
 }
 public void setY(int y) {
  this.y = y;
 }
}


public class 内省JavaBean {
  public static void main(String[] args) throws Exception {
   //创建Point对象
   Point point=new Point(3,5);
   //用内省的方法来操作
   String propertyName="x";
   PropertyDescriptor pros=new PropertyDescriptor(propertyName,point.getClass());
   Method met=pros.getReadMethod();
   Object retVal=met.invoke(point);
   System.out.println(retVal);
   
   
   Method met2=pros.getWriteMethod();
   met2.invoke(point,7);
   System.out.println(point.getX());
  }
}

 

 

 

采用便利BeanInfo的所有属性方式来查找和设置某个RefectPoint对象的x属性
在程序中把一个类当作JavaBean来看,就是调用IntroSpector.getBeaninfo方法
得到的Beaninfo对象封装了吧这个类当作JavaBean看的结果信息。

//在 point类 上进行内省,了解其所有属性、公开的方法和事件。
BeanInfo beanInfo=Introspector.getBeanInfo(point.getClass);
//获得point类内的所有方法   返回的是一个方法的集合
PropertyDescriptor[] pds=beanInfo.getPropertyDescriptors();
//然后对这个方法集合进行迭代
Object retVal=null;
for(PropertyDescriptor pd:pds){
 //如果的迭代出来的属性名与我传进来的属性名propertyName相同
 if(pd.getName().equals(propertyName)){
  Method met2=pd.getReadMethod();
  retVal=met2.invoke(point);
  break;
 }
}

 

 

 

 ---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

 

 

 

 

 


 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值