Java SE 加强内省、反射

内省(Introspector)
l为什么要学内省?
开发框架时,经常需要使用java对象的属性来封装程序的数据,每次都使用反射技术完成此类操作过于麻烦,所以sun公司开发了一套API,专门用于操作java对象的属性。
l什么是Java对象的属性和属性的读写方法?
l内省访问JavaBean属性的两种方式:
•通过PropertyDescriptor类操作Bean的属性
•通过Introspector类获得Bean对象的 BeanInfo,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),
通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后通过反射机制来调用这些方法。

l内省是 Java 语言对 Bean 类属性的一种缺省处理方法。例如类 A 中有属性 name, 可以通过 getName,setName 来得到其值或者设置新的值。
通过 getName/setName 来访问 name 属性,这是默认的规则。 Java 中提供了一套 API 来访问某个属性的 getter/setter 方法。
l一般的做法是通过类 Introspector 来获取某个对象的BeanInfo 信息,然后通过 BeanInfo 来获取属性的描述器(PropertyDescriptor ),
通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后通过反射机制来调用这些方法


l

内省beanutils工具包

lSun公司的内省API过于繁琐,所以Apache组织结合很多实际开发中的应用场景开发了一套简单、易用的API操作Bean的属性——BeanUtils

lBeanutils工具包的常用类:

BeanUtils
PropertyUtils
ConvertUtils.regsiter(Converter convert, Class clazz)
自定义转换器




反射

l一个类有多个组成部分,例如:成员变量,方法,构造方法等。反射就是加载类,并解剖出类的各个组成部分
l
l编程时什么情况下才需要加载类,并解剖出类的各个组成部分呢?

Java反射所需要的类并不多,主要有java.lang.Class类和java.lang.reflect包中的FieldConstructorMethodArray类。
注意:Class类是Java反射的起源,针对任何一个你想探勘的类,只有先为它产生一个Class类的对象,接下来才能通过Class对象获取其他想要的信息。
l


lClass类
l



















posted @ 2012-09-25 15:15  chrp99  阅读(162)  评论(0编辑  收藏  举报