您的位置:首页 > 编程语言 > Java开发

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[]{});//获取第一个属性的值

这样,我们就可以很方便的取出所想要获取的属性值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: