黑马程序员技术交流社区

标题: 内省操作是什么? [打印本页]

作者: 郑昌奋    时间: 2013-3-23 10:44
标题: 内省操作是什么?
本帖最后由 郑昌奋 于 2013-3-23 13:19 编辑

内省操作是什么?
作者: 赵家阳    时间: 2013-3-23 10:56
     在java的反射中,所有的类被抽象出一个类,即Class类,这样我们就可以在程序运行的过程中通过配置文件,动态的加载类。但是在用反射的时候有些前提,就是:当我们调用有参的constructor的时候必须先知道构造函数传入的参数是什么类型;调用Method的时候必须先知道成员函数传入的参数是什么类型;调用field的时候必须先知道成员变量的类型。但是在某些情况下,一个类中的成员属性的名字对外是不可见的,这时候我们只可以得出他的成员类型的数组field[],在不知道确切变量名的情况下不可以定位到确切的变量上。而他提供了对这个属性公开的读(get)、写(set)方法, 虽然方法名和方法操作的对象有时候有很大的关系,但是我们不能保证这个关系一定成立。而且这种只提供get、set方法,不提供变量名的情况还很常见,因此java就将这种抽象为javabean类,对javabean类的操作,通过get、set函数后面的名字就“拟”得出变量的名字。通过这个名字,我们可以确切的求出某个变量的值。而对javabean的操作是通过内省(introspector)来完成的。
     建议:不明白可以去看看张孝祥老师的相关视频。
作者: 郑昌奋    时间: 2013-3-23 11:01
赵家阳 发表于 2013-3-23 10:56
在java的反射中,所有的类被抽象出一个类,即Class类,这样我们就可以在程序运行的过程中通过配置文件 ...

嗯,明白了!谢谢你
作者: TK13761    时间: 2013-3-23 11:05
这个张老师的视频javaBean 那涉及了一些,
首先  内省 是 Java 语言对 Bean 类属性的一种缺省处理方法。
内省对javabean有两种访问格式
1.通过PropertyDescriptor类操作Bean的属性。
2.通过Introspector类获得Bean对象的 BeanInfo,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后通过反射机制来调用这些方法。
什么时候用内省
开发框架时,经常需要使用java对象的属性来封装程序的数据,每次都使用反射技术完成此类操作过于麻烦,所以sun公司开发了一套API,专门用于操作java对象的属性。
怎么更好的了解内省
Sun公司的内省API过于繁琐,所以Apache组织结合很多实际开发中的应用场景开发了一套简单、易用的API操作Bean的属性——BeanUtils



作者: 谢洋    时间: 2013-3-23 12:24
本帖最后由 谢洋 于 2013-3-23 12:26 编辑

老方的30天Web开发视频说得最清楚,内省的最大作用是可以很方便的操作数据的,建议你有空去看一下
作者: 赵家阳    时间: 2013-3-23 22:36
郑昌奋 发表于 2013-3-23 11:01
嗯,明白了!谢谢你

互相交流哈。。。 :lol




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2