A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 史晓霞 黑马帝   /  2011-11-10 09:28  /  1679 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

内省和javaBean什么关系

5 个回复

正序浏览
郭敏 黑马帝 2011-11-10 10:04:35
地板
那你就先记着内省的功能,等以后学到框架时,你就会了解!
回复 使用道具 举报
它们之间运行的结果没有什么区别,如果你不做框架,你根本就用不到内省还有java的反射技术,这些技术主要是用作开发框架的时候,比如,在javaWEB开发中,我们要想使用Hibernate框架来进行关系与对象的映射时,就必须要配置相应的Xml文件,我们配置好以后,框架的内部实现原理就是,它首先会去解析这个Xml文档,当它解析到配置的数据以后,这些数据包括你配置的javaBean的名字还有属性等,它就会拿着这些数据去内省你的javaBean来做出相应的操作,这时候如果不使用内省的话,它根本就无法访问到你javabean里的东西,我们知道一个类中的成员是不允许外界的对象来访问的。这样说不知道你明不明白。
回复 使用道具 举报
JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省,下面有代码:
如果用内省:
ReflectPoint pt=new ReflectPoint(3,5);
String propertyName="x";
PropertyDescriptor pd=new PropertyDescriptor(propertyName,pt.getClass());
Method methodGetX=pd.getReadMethod();
Object retVal=methodGetX.invoke(pt);
System.out.println(retVal);
但是下面的代码不是更简单呢
ReflectPoint pt=new ReflectPoint(3,5);
System.out.println(pt.getX());

它们的区别是什么?
回复 使用道具 举报
它们之间的关系其实就可以认为是普通类和反射之间的关系,内省只是专门作用于javabean的
JavaBean的内省就是对JavaBean中的属性和事件的一些处理方法,通过setName和getName去访问和设置name的值。Java中通过Introspector类的getBeanInfo(beanClass)静态方法,获得JavaBean的BeanInfo集合,再遍历BeanInfo集合来得到JavaBean的某一个属性的属性描述器(PropertyDescriptor),利用PropertyDescriptor得到JavaBean中属性的get和set方法。

例如:
BeanInfo beanInfo = Introspector.getBeanInfo(Student.class);
  PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
  Student student=new Student();
  for(PropertyDescriptor pd1:pds){
   if(pd1.getName().equals("laozhang")){
    Method method3 = pd1.getReadMethod();
    System.out.println(method3.invoke(student));
    Method method4 = pd1.getWriteMethod();
    method4.invoke(student, "laoli");
    System.out.println(method3.invoke(student));
    System.out.println(pd1.getName());
   }
  }
我也就懂这些希望能帮助你!!!
回复 使用道具 举报
郭敏 黑马帝 2011-11-10 09:41:21
沙发
我认为,内省主要用来对javaBean中的成员变量进行Get / Set 操作,因为在开发框架过程中,经常需要使用Java对象的属性来封装程序的数据,如果每次都使用反射技术完成此操作过于麻烦,所又才有了内省的出现。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马