JSP&Servlet21
FieldField表示类的成员变量,可以是实例变量,也可以是静态变量。
5.1获取Field对象
获取Field对象需要使用Class对象,下面是Class类的API:
l Field getField(String name):通过名字获取公有成员变量的反射对象,包含父类中声明的公有成员变量;
l Field[] getFields():获取所有公有成员变量反射对象,包含父类中声明的公有成员变量;
l Field getDeclaredField(String name):通过名字获取本类中某个成员变量,包含本类的private成员变量,但父类中声明的任何成员变量都不包含;
l Field[] getDeclaredFields():获取本类中声明的所有成员变量,包含private成员变量,但不包含父类中声明的任何成员变量;
5.2Field类的常用方法
§ String getName():获取成员变量名;
§ Class getDeclaringClass():获取成员变量的类;
§ Class getType():获取当前成员变量的类型;
§ Object get(Object obj):获取obj对象的成员变量的值;
§ void set(Object obj, Object value):设置obj对象的成员变量值为value;
JavaBeans概述
JavaBean是一种规范,对类的要求
1、必须有一个默认构造器(无参)
2、提供get/set方法,如果只有get方法,则该属性为只读属性
3、属性:有get/set方法的成员,或者没有成员,只有get/set方法
属性名:由get/set方法决定,而不是成员民名称
4、boolean类型的属性,它的读方法可以是is开头,也可以是get开头
JavaBean属性是具有getter/setter方法的成员变量。
• 也可以只提供getter方法,这样的属性叫只读属性;
• 也可以只提供setter方法,这样的属性叫只写属性;
• 如果属性类型为boolean类型,那么读方法的格式可以是get或is。例如名为abc的boolean类型的属性,它的读方法可以是getAbc(),也可以是isAbc();
JavaBean属性名要求:前两个字母要么都大写,要么都小写
内省introspector
内省类-->Bean信息-->属性描述符-->属性的get/set对应的method ----->可以反射了
内省的目的是得到Javabean属性的读、写方法的反射对象,通过反射对Javabean属性进行操作的一组API
内省获得BeanInfo(提供Javabean的信息)
方法:
getBeanInfo(Class<?> beanClass)
在javaBean上进行内省,了解其所有属性、公开的方法和事件
1、通过java.beans.Introspector的getBeanInfo()方法获取java.beans.BeanInfo实例
BeanInfo beanInfo = Introspector.getBeanInfo(User.class);
BeanInfo是一个JavaBean类型的信息类
2、BeanInfo类得到所有属性描述符PropertyDescriptor、方法描述符MethodDescriptor
利用BeanInfo的方法:
1、getMethodDescriptors()
获得Beans MethodDescriptor 数组
2、getPropertyDescriptors()
获得Beans PropertyDescriptor 数组
通过beaninfo得到这个类的所有javabean属性的propertyDescriptor对象,然后通过PropertyDiscrptor
对象获得这个属性的getter/setter方法的method对象
methodDescriptor类方法:
getMethod()
获得methodDescriptor封装的方法
getParameterDescriptors()
获得此MethodDescriptor每个方法参数的ParameterDescriptor
每个PropertyDescriptor对象对应一个JavaBean属性:
PropertyDescriptor类的方法
§ String getName():获取JavaBean属性名称;
§ Method getReadMethod:获取属性的读方法;
§ Method getWriteMethod:获取属性的写方法
commons-beanutils,它是依赖内省完成! 而内省依赖反射
* 导包:
> commons-beanutils.jar
> commons-logging.jar
例子:
把map中的属性直接封装到一个bean中
Map:{“username”,"zhangsan","password","132465"}
当把map的数据封装到一个Javabean中,要求map中的key与bean的属性名相同
页:
[1]