基础加强-IntroSpector(内省)
来源:互联网 发布:微课视频剪辑软件 编辑:程序博客网 时间:2024/06/18 09:39
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
IntroSpector(内省)
一,内省是操作javaBean 的一种方式。jdk中提供了以javaBean进行操作的一此API,这套API就称为内省
二,,javaBean
是一种特殊的java类。当一类中的一些get或set打头的方法,那么这个类就可以当做javaBean 来操作。
如果将一个类当做javaBean操作,那么这个javaBean的属性是根据get和set方法的名称来推断出来 的,不是根据成员变量推断的。
如:
class Persion{
pirvate int x;
public int getAge(){
retrun x;
}
public void setAge(int age){
this.x = age;
}
}
当这个persion类当做一个普通的java类操作时,这个persion类中的一个x属性,而当做javaBean来操作时,javaBean就有一个叫做
age的属性。javaBean属性的格式:当set或get 方法后的名字如果有第二个字母而这个字母是小的,则把第一个字母变成小的,如果第二个字母大写,那么就全大写
如:getAeg 中的Age在javaBean中为age 。如果只有一个字母,在javaBean中则是小写
三,如果要在两个模块之间传递多个信息,可以将这些信息封装到一个javaBean中,这种javaBean的实例对象通常称之为值对象,(value-Object)简称
vo 。总之,一个类被当做javaBena使用时,javaBean的属性是根据方法名推断出来 的,它根本看不到java类内部的成员变量
四,内省中的类
1,PropertyDescriptor类
构造函数:
PropertyDescriptor(String propertyName,Class className):获取一个描述属性的类.其中propertyName:为javaBean中的属性
(此javaBean属性在进行推断),className:为这个属性所属于的类的class对象
方法:
Method getReadMethod():会返回此属性的get方法的对象
Method getWriteMethod();会返回此属性的set方法的对象
String getName():返回此属性的名字
二,IntroSpector类
1,静态方法:
static BeanInfo getBeanInfo(Class beanClass):返回一个关于此类的BeanInfo对象(也就是说把这个类当作javaBean来看,得到的是BeanInfo对象封装了把这个类当作javaBean看的结果)
三,BeanInfo类
这类其实就是:把一个普通类当作javaBean看的结果,把这结果封装成的对象
1,方法:
PropertyDescriptor[]getPropertyDescriptors():获得这个对象的所有属性的对象也就是PropertyDescriptor对象,将并其封装成数组
遍历PropertyDescriptor数组,通过 PropertyDescriptor中的getName方法与要找的属性进行判断,如果找到进行相应的处理并结束循环
五;通过内省获取属性的方法:
方法一:
1,将一个javaBean类和要获取的属性名封装成一个PropertyDescriptor对象。
2.通过PropertyDescriptor中的getReadMethod和getWriterMethod方法来获取关于javaBean类中的get和set的Method对象
3,通过Method类中的invoke方法来运行javaBean中的get和set 方法
代码:
//建立一个vo类描述属性值的对象
PropertyDescriptor propertyDescriptor = new PropertyDescriptor(property,persion.getClass());
//获取 此对象的的get方法
Method getAgeMethod = propertyDescriptor.getReadMethod();
//调用 invoke方法
Object retVal = getAgeMethod.invoke(persion);
return retVal;
方法二:
1,通过IntroSpector类中的静态方法getBeanInfo(Class beanClass)方法来获取一个把一个普通类看成javaBean的结果对象BeanInfo
2,通过BeanInfo对象中的getPropertyDescriptors()方法来获取此类中的所有属性对象(PropertyDescriptor数组)
3,循环遍历此数据并通过PropertyDescriptor中的getName方法与要查找的属性名进行比较,如果找到进行比较,并结束循环。
代码:
public static void getBeanGetMethod()throws Exception {
Persion persion = new Persion(23,"dkfj");
//通过 IntroSpector中的静态方法getBeanInfo来获取把Persion看作javaBean结果的对象
BeanInfo beanInfo = Introspector.getBeanInfo(persion.getClass());
//通过 BeanInfo类中的getPropertyDescriptors方法获取存储PropertyDescriptor对象的数组
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
//通过遍历找到属性名与name有关的对象,并进行操作
for (PropertyDescriptor propertyDescriptor: propertyDescriptors) {
if(propertyDescriptor.getName().equals("name")){
//获取关于age的set方法的对象
Method setMethod = propertyDescriptor.getWriteMethod();
//调用Method类中的invoke方法调用set方法进行值的设置
setMethod.invoke(persion, "lixiaoming");
}
//验证结果是否正确
System.out.println(persion.getName());
}
}
- 基础加强-IntroSpector(内省)
- Java基础加强之内省(introspector)
- Java基础加强之内省(introspector)
- 基础加强—04—内省(IntroSpector)
- java基础加强--JavaBean和内省Introspector
- 黑马程序员-->Java基础加强-->内省(Introspector)与注解(Annotation)
- 内省(introSpector)
- 内省(INTROSPECTOR)
- Introspector(内省)
- Java Introspector(内省)
- 黑马程序员_java基础笔记(12)...内省(IntroSpector)
- java内省(Introspector)简介
- Java的内省(introspector)
- java中的内省(Introspector)
- Java web-内省(Introspector)
- 黑马程序员-------(基础加强)内省
- 黑马程序员--基础加强(内省-javabean)
- javaweb-day03-6(基础加强-内省)
- 单例模式以及单例模式与静态类的对比
- 三门问题
- 算法导论学习之归并排序
- OSX: Garageband/LogicPro各种安装包下载
- python----异常、属性
- 基础加强-IntroSpector(内省)
- PHP自学过程之 运算符与流程控制
- 表单练习题
- 64位系统深入剖析:不仅是内存这么简单
- PC110305/UVA10188
- 第五周项目1.4在构造函数中使用参数初始化表对数据成员初始化
- 稀疏矩阵用三元数组表示后的矩阵乘法算法 集合!
- JavaScript 类型转换
- Java基础---Java---正则表达式-----匹配、切割、替换、获取等方法