Java内省机制
来源:互联网 发布:网络推广策划书范文 编辑:程序博客网 时间:2024/05/17 21:42
我们又通常把javabean的实例对象称之为值对象(Value Object),因为这些bean中通常只有一些信息字段和存储方法,没有功能性方法。
一个JavaBean类可以不当JavaBean用,而当成普通类用。JavaBean实际就是一种规范,当一个类满足这个规范,这个类就能被其它特定的类调用。一个类被当作javaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到java类内部的成员变量。去掉set前缀,然后取剩余部分,如果剩余部分的第二个字母是小写的,则把剩余部分的首字母改成小的。下面就用前面的讲解的反射方式来设置或读取JavaBean的属性:
imp
imp
imp
imp
除了反射用到的类需要引入外,内省需要引入的类如上所示,它们都属于java.beans包中的类,自己写程序的时候也不能忘了引入相应的包或者类。下面代码片断是一个设置某个JavaBean类某个属性的关键代码:
private static void setObjectProperty(ReflectPoint pt1, int value,String propName) throws IntrospectionException, IllegalAccessException, InvocationTargetException {
/*BeanInfo bean = Introspector.getBeanInfo(ReflectPoint.class);
PropertyDescriptor [] properties = bean.getPropertyDescriptors();
for(PropertyDescriptor property: properties)
{
if(property.getName().equals(propName))
{
Method mSetX = property.getWriteMethod();
mSetX.invoke(pt1, value);
break;
}
}*/
PropertyDescriptor property = new PropertyDescriptor("x",ReflectPoint.class);
Method mSetX = property.getWriteMethod();
mSetX.invoke(pt1, value);
}
代码中注释的语句代表一种方式,最后的三行代表另外一种设置相应类相应属性的方式。从简洁上来说,第二种方式显然更优雅。第一种方式中首先是获得相应javaBean的类信息bean,用的BeanInfo这个类来描述的。然后就能够通过getPropertyDescriptors方法获取属性描述数组对象。最后从数组中取去一个个的属性对象进行操作——获取相应的读写方法,然后调用相应的读写方法。这些是通过反射机制做到的。由于这种方式比较麻烦,如果只调用其中一种方法,就要遍历一次属性描述数组,所以就产生了第二种方式,直接通过传入属性名称,相应的javaBean类型参数,构造出一个需要的PropertyDescriptor对象,然后再进行调用。
理解了相应的原理,那些现成的工具用起来就会更舒服,如Beanutils与PropertyUtils工具。这两个工具设置属性的时候一个主要区别是PropertyUtils.getPropety方法获得的属性值的类型为该属性本来的类型,而BeanUtils.getProperty则是将该属性的值转换成字符串后才返回。
- java内省机制运用
- Java内省机制
- java的内省机制
- Java内省机制
- java 中的内省机制
- java内省机制
- java内省机制
- java内省机制介绍
- Java内省机制
- Java内省机制
- Java内省机制
- java内省机制
- Java内省机制
- java 内省机制
- Java 内省机制
- Java内省机制
- Java内省机制IntroSpector
- Java 内省机制
- static、const、volatile、typeof关键字的用途描述
- 完成一个trim_string函数,将一个字符串两端的空格、回车、tab符号去掉。
- 内存操作函数:
- 大数相加问题
- char的整型运算
- Java内省机制
- 虚拟化
- 如何避免同一头文件的多次include
- c++中虚函数的实现机制?
- 对一个包含虚函数成员的对象bzero()会有什么问题?
- 在函数体内声明[1] char *str=”abc”;和[2] char str[]={‘a’,’b’,’c’}有什么区别
- C++中模板的编译过程
- 尽可能的优化代码性能
- 结构体大小判断