使用内省完成JavaBean到集合的封装
来源:互联网 发布:java测试是不是回文 编辑:程序博客网 时间:2024/06/04 19:36
使用内省完成JavaBean到集合的封装
使用内省得到JavaBean的属性和操作这些属性的方法,将数据封装到集合中或者把集合中的数据封装到JavaBean。
内省对象介绍
-BeanInfo–提供有关其 bean 的方法、属性、事件等显式信息描述的接口类。
方法:
getMethodDescriptors()–获得JavaBean所有方法的描述对象数组
getPropertyDescriptors() –获得JavaBean的所有属性的描述对象数组
-Introspector–提供获取bean信息方法的工具类。
方法:
getBeanInfo(Class beanClass)–在 Java Bean 上进行内省,了解其所有属性、公开的方法和事件.
-MethodDescriptor–描述JavaBean的方法的对象
-PropertyDescriptor–描述JavaBean的属性的对象
* 方法*
getReadMethod()–得到该属性的获取值的方法,即getXX()方法。
getWriteMethod()–得到属性的设值方法,即setXX()方法。
实例代码
- JavaBean数据封装到Map集合中
/** * JavaBean转为Map集合 * * @param q * JavaBean对象 * @return Map集合 */ public static <Q> Map<String, Object> beanToMap(Q q) { BeanInfo beanInfo = null; Map<String, Object> map = new HashMap<String, Object>(); try { // 拿到泛型为Q的bean的信息 beanInfo = Introspector.getBeanInfo(q.getClass()); // 拿到该bean的方法和属性的描述类数组 MethodDescriptor[] methodDescriptors = beanInfo.getMethodDescriptors(); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor pDescriptor : propertyDescriptors) { System.out.println("pDescriptor.getName()=" + pDescriptor.getName() + "; getShortDescription=" + pDescriptor.getShortDescription() + "; id=" + pDescriptor.getValue("id")); } for (MethodDescriptor mDescriptor : methodDescriptors) { System.out.println("mDescriptor.getName()=" + mDescriptor.getName() + "; getShortDescription=" + mDescriptor.getShortDescription() + "; id=" + mDescriptor.getValue("id")); } // 遍历将bean的属性值放入Map中 for (PropertyDescriptor pDescriptor : propertyDescriptors) { String displayName = pDescriptor.getDisplayName(); // 使用内省拿到该属性的获取值的方法,并调用该方法得到属性值 Object invokeValue = pDescriptor.getReadMethod().invoke(q, new Object[] {}); System.out.println("displayName=" + displayName + "; invokeValue=" + invokeValue); // 存入map集合 if (!"class".equals(displayName)) { map.put(displayName, invokeValue); } } } catch (IntrospectionException e) { e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(map); return map; }
Map集合数据封装到JavaBean中
public static <Q> Q mapToBean(Map<String, Object> map, Q q) { BeanInfo beanInfo = null; try { // 拿到bean的信息 beanInfo = Introspector.getBeanInfo(q.getClass()); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); // 遍历属性并赋值 for (PropertyDescriptor pd : propertyDescriptors) { if (!"class".equals(pd.getDisplayName())) { String proName = pd.getDisplayName(); // 使用内省拿到该属性的设值方法,并调用该方法执行赋值 pd.getWriteMethod().invoke(q, map.get(proName)); } } } catch (IntrospectionException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(q); return q; }
1 0
- 使用内省完成JavaBean到集合的封装
- 使用内省封装数据到对象中
- 使用内省的方式操作JavaBean
- javaBean的内省机制
- JAVABean的内省操作
- javaBean的内省操作
- javaBean的内省操作
- javaBean的内省操作
- javaBean的内省操作
- JavaBean的内省操作
- JavaBean的内省操作
- javabean的内省操作
- JAVABean的内省操作
- JavaBean基本的内省
- 使用内省方式操作JavaBean
- 【Java进阶】内省IntroSpector操作JavaBean和Apache-commons-dbutils对内省的使用
- JavaBean的简单内省操作
- 内省和javaBean的学习
- CLRS 9.1最小值和最大值
- 技术揭秘二:探讨12306两地三中心混合云架构
- Compile FFmpeg on CentOS
- JS面试题(持续更新)
- js 点不到我整蛊小游戏学习
- 使用内省完成JavaBean到集合的封装
- android开源项目和常用框架
- jQuery.validate 中文API
- LeetCode 6_ZigZag Conversion
- uart arm9
- DICOM VR数据类型表
- Android 从源码的角度解析Scroller的滚动实现原理
- 变量的定义和声明的区别详解
- iOS 面试大全从简单到复杂(简单篇)