黑马程序员技术交流社区
标题:
内省
[打印本页]
作者:
史晓霞
时间:
2011-11-10 09:28
标题:
内省
内省和javaBean什么关系
作者:
郭敏
时间:
2011-11-10 09:41
我认为,内省主要用来对javaBean中的成员变量进行Get / Set 操作,因为在开发框架过程中,经常需要使用Java对象的属性来封装程序的数据,如果每次都使用反射技术完成此操作过于麻烦,所又才有了内省的出现。
作者:
贺洪京
时间:
2011-11-10 09:50
它们之间的关系其实就可以认为是普通类和反射之间的关系,内省只是专门作用于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:52
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());
它们的区别是什么?
作者:
贺洪京
时间:
2011-11-10 10:03
它们之间运行的结果没有什么区别,如果你不做框架,你根本就用不到内省还有java的反射技术,这些技术主要是用作开发框架的时候,比如,在javaWEB开发中,我们要想使用Hibernate框架来进行关系与对象的映射时,就必须要配置相应的Xml文件,我们配置好以后,框架的内部实现原理就是,它首先会去解析这个Xml文档,当它解析到配置的数据以后,这些数据包括你配置的javaBean的名字还有属性等,它就会拿着这些数据去内省你的javaBean来做出相应的操作,这时候如果不使用内省的话,它根本就无法访问到你javabean里的东西,我们知道一个类中的成员是不允许外界的对象来访问的。这样说不知道你明不明白。
作者:
郭敏
时间:
2011-11-10 10:04
那你就先记着内省的功能,等以后学到框架时,你就会了解!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2