内省(introSpector)
来源:互联网 发布:java web j2ee 编辑:程序博客网 时间:2024/06/05 14:14
用于对JavaBean(特殊的Java类:符合一些特殊的规则get/set方法)操作。
当一个普通的类中有getXxx , setXxx方法时,就可以当做一个JavaBean来操作。在JavaBean中并不知道这个类中的成员名称,所以就把去除get , set后的名称当做成员名称:
如果去除get , set后的名称的第二个字母是小写,则把第一个字母变成小写。如:
gettime --> time getTime--> time getCPU -->CPU
JDK中提供了JavaBean进行操作的API,这API就称为内省。
如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object ,简称VO) 。
内省的JavaBean应用
PropertyDescriptor pd = new PropertyDescriptor( 属性名 , 类名 );
pd.getReadMethod();
pd.getWriterMethod();
JavaBean规则
1. 类访问权限为公有
2. 所有属性为私有
3. 每个字段对外提供setter方法和getter方法
4. 具备一个无参的构造方法
例:
PropertyDescriptor pd = new PropertyDescriptor(propertyName,isd.getClass());//参数1:属性名,参数2:bean类 MethodmethodSetX = pd.getWriteMethod(); methodSetX.invoke(isd,obj); MethodmethodGetX = pd.getReadMethod(); ObjectretVal = methodGetX.invoke(isd);
可以用Eclipse的方法抽取(Refactor/Extract Method...)自动生成setProperty和getProperty方法。将其封装进去。
把一个类当作JAVABEAN:
BeanInfo beanInfo = IntorSpector.getBeanInfo( 对象.getClass() ); PropertyDesriptors[] pds= beanInfo.getPropertyDescriptors();//可获取类中所有的属性方法。 再用for循环历遍查找需要的方法。 BeanInfo beanInfo = Introspector.getBeanInfo(isd.getClass()); PropertyDescriptor[] pds= beanInfo.getPropertyDescriptors(); ObjectretVal = null; for(PropertyDescriptor pd : pds){ if(pd.getName().equals(propertyName)){ MethodmethodGetX = pd.getReadMethod(); retVal= methodGetX.invoke(isd); break; } } return retVal;
BeanUtils工具包
Java7的新特性:
Map map = (name : “zxx”,age : 18); BeanUtils.setProperty(map,“name”,”lhm”);
get属性时返回的结果为字符串,set属性时可以接受任意类型的对象,通常使用字符串。
BeanUtils.setProperty(bud,"y", "19"); System.out.println(BeanUtils.getProperty(bud,"y"));
get或者set属性链的值:
BeanUtils.setProperty(bud,"birthDay.time", "111"); System.out.println(BeanUtils.getProperty(bud,"birthDay.time"));
copyProperty(Object best,Object orig):copy源属性的值至目标属性。
describe(Object dean): 将一个bean转换成map;
Mapmap = BeanUtils.describe(bud); BeanUtils.setProperty(map,"y", 22); System.out.println(map);PropertyUtils:get和set都是属性本来的类型
PropertyUtils.setProperty(bud,"x", 13); PropertyUtils.getProperty(bud,"x");
- 内省(introSpector)
- 内省(INTROSPECTOR)
- Introspector(内省)
- Java Introspector(内省)
- java内省(Introspector)简介
- 基础加强-IntroSpector(内省)
- Java的内省(introspector)
- java中的内省(Introspector)
- Java web-内省(Introspector)
- 内省(Introspector)
- 内省(Introspector)
- 内省(Introspector)
- IntroSpector内省
- 内省(Introspector)
- java内省(Introspector)简介及实例
- 黑马程序员——内省(IntroSpector)
- Java基础加强之内省(introspector)
- Java基础加强之内省(introspector)
- POJ_2464 Brownie Points II 线段树
- 10个免费的PHP编辑器
- 堆和栈的区别(转过无数次的文章) .
- Android IPC 通讯机制源码分析
- 解析Objective-C反射
- 内省(introSpector)
- Makefile学习教程: 跟我一起写 Makefile
- jquery显示和隐藏层的代码
- Hibernate 二级缓存
- NSNotificationCenter 的详细说明 --转
- linux 下常用查看Apache状态语句
- 如何设置、查看以及调试core文件
- python灰帽子 pydbg安装
- MySQL安装图解