java内省机制运用
2009-11-23 15:33
330 查看
引文:
内省是Java语言对属性的一种缺省处理方法。
例如类A中有属性name,那我们可以通过getName,setName来得到其值或者设置新的值。
Java中提供了一套API用来访问某个属性的getter/setter,这些api在包java.beans中 , 一般的做法是通过类Introspector来获取某个对象的BeanInfo信息,然后通过BeanInfo来获取属性的描述器,通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后就是通过反射机制来调用这些方法。 就好像Struts中的FormBean就是通过内省机制来将表单中的数据映射到类的属性上,因此要求FormBean的每个属性要有getter/setter方法。
上文是引用了liusoft(红薯)对内省的解释。
最近在做一个通用excel导出功能,主要的数据源是从数据库导出到excel,因此不是页面导出。如果页面导出到excel,只需要将html 的表格信息直接传送至java,并且以流形式刷出到页面即可。这里结合了jxl导出到excel的功能。
讲正文:通常我们的系统中会有很多grid表格展现,而且很多时候我们需要进行分页,因此对于需要导出所有数据时,我们只能从数据库中获取数据经过一些拼装组合,然后以流的形式刷到页面。而恰恰是很多功能都需要用到导出,因此很多地方会用到不同的bean[其实也就是对象数据存储层],调用一个公用的方法,
/**
* 导出到excel *
* @param displayTitle:显示列的名称集合
* @param displayField:显示的字段集合[类中的属性]
* @param dataSource:数据源
*/
exportExcel(List<String> displayTitle,List<String> displayField,List dataSource,HttpServletResponse response),这里如何对dataSource中的存储对象是什么类,拥有哪些属性,拥有哪些方法?因此就需要通过java内省机制来解决。
例如:
Object obj = dataSource.get(0); //获取第一个数据对象
BeanInfo bean = Introspector.getBeanInfo(obj.getClass());//获取对象类
PropertyDescriptor[] propertys = bean.getPropertyDescriptors();//获取对象类的所有属性,这里包括继承类的属性
propertys[0].getReadMethod().invoke(obj, new Object[]{});//获取第一个属性的值
这样,我们就可以很方便的取出所想要获取的属性值。
内省是Java语言对属性的一种缺省处理方法。
例如类A中有属性name,那我们可以通过getName,setName来得到其值或者设置新的值。
Java中提供了一套API用来访问某个属性的getter/setter,这些api在包java.beans中 , 一般的做法是通过类Introspector来获取某个对象的BeanInfo信息,然后通过BeanInfo来获取属性的描述器,通过这个属性描述器就可以获取某个属性对应的getter/setter方法,然后就是通过反射机制来调用这些方法。 就好像Struts中的FormBean就是通过内省机制来将表单中的数据映射到类的属性上,因此要求FormBean的每个属性要有getter/setter方法。
上文是引用了liusoft(红薯)对内省的解释。
最近在做一个通用excel导出功能,主要的数据源是从数据库导出到excel,因此不是页面导出。如果页面导出到excel,只需要将html 的表格信息直接传送至java,并且以流形式刷出到页面即可。这里结合了jxl导出到excel的功能。
讲正文:通常我们的系统中会有很多grid表格展现,而且很多时候我们需要进行分页,因此对于需要导出所有数据时,我们只能从数据库中获取数据经过一些拼装组合,然后以流的形式刷到页面。而恰恰是很多功能都需要用到导出,因此很多地方会用到不同的bean[其实也就是对象数据存储层],调用一个公用的方法,
/**
* 导出到excel *
* @param displayTitle:显示列的名称集合
* @param displayField:显示的字段集合[类中的属性]
* @param dataSource:数据源
*/
exportExcel(List<String> displayTitle,List<String> displayField,List dataSource,HttpServletResponse response),这里如何对dataSource中的存储对象是什么类,拥有哪些属性,拥有哪些方法?因此就需要通过java内省机制来解决。
例如:
Object obj = dataSource.get(0); //获取第一个数据对象
BeanInfo bean = Introspector.getBeanInfo(obj.getClass());//获取对象类
PropertyDescriptor[] propertys = bean.getPropertyDescriptors();//获取对象类的所有属性,这里包括继承类的属性
propertys[0].getReadMethod().invoke(obj, new Object[]{});//获取第一个属性的值
这样,我们就可以很方便的取出所想要获取的属性值。
相关文章推荐
- Java内省机制
- java 中的内省机制
- 黑马程序员Java学习笔记__javaBean的内省机制
- java 内省机制
- Java基础---Java---基础加强---内省的简单运用、注解的定义与反射调用、 自定义注解及其应用、泛型及泛型的高级应用、泛型集合的综合
- Introspector谈Java内省机制
- java Introspector谈Java内省机制
- java内省机制 + 内省是什么 + 内省实现方式 + 和反射的区别
- java内省机制
- Java使用内省机制复制对象信息
- Java 内省机制
- 初学java内省机制
- Java的内省机制
- Java内省机制
- Java反射与内省机制总结
- Java的加载资源文件+JavaBean+内省机制
- Java注解机制的理解和运用
- Java 内省机制
- java事件监听机制(观察者设计模式的实际运用)
- JAVA的内省机制(introspector)与反射机制(reflection)