1. import java.beans.BeanInfo;
  2. import java.beans.Introspector;
  3. import java.beans.PropertyDescriptor;
  4. import java.lang.reflect.Field;
  5. import java.lang.reflect.Method;
  6. /**
  7. * 使用内省的方式操作JavaBean
  8. */
  9. public class IntroSpectorTest {
  10. public static void main(String[] args) throws Exception {
  11. ReflectPoint reflectPoint = new ReflectPoint(3,7);
  12. //调用JavaBean中方法的传统作法
  13. Class classz = reflectPoint.getClass();
  14. Field[] fields = classz.getDeclaredFields();
  15. for (Field field : fields) {
  16. String name = "set" + field.getName().toUpperCase();
  17. Method method = classz.getMethod(name, int.class);
  18. method.invoke(reflectPoint, 3);
  19. }
  20. System.out.println(reflectPoint);
  21. //使用内省的方式调用JavaBean的方法
  22. String propertyName = "x";
  23. //获得属性x的值
  24. Object retVal = getProperty2(reflectPoint, propertyName);
  25. System.out.println(retVal);
  26. //设置属性x的值
  27. setProperty(reflectPoint, propertyName,10);
  28. System.out.println(reflectPoint.getX());
  29. }
  30. /**
  31. * 设置属性的值
  32. * @param obj 属性所属的对象
  33. * @param propertyName 属性名
  34. * @param propertyValue 属性值
  35. */
  36. private static void setProperty(Object obj, String propertyName,Object propertyValue) throws Exception {
  37. PropertyDescriptor pd2 = new PropertyDescriptor(propertyName,obj.getClass());
  38. Method setMethod = pd2.getWriteMethod();
  39. setMethod.invoke(obj, propertyValue);
  40. }
  41. /**
  42. * 获得对象的属性值
  43. * @param obj 属性所属的对象
  44. * @param propertyName 属性名
  45. * @return 属性的值
  46. */
  47. private static Object getProperty(Object obj, String propertyName) throws Exception {
  48. PropertyDescriptor pd = new PropertyDescriptor(propertyName,obj.getClass());
  49. Method getMethod = pd.getReadMethod();  //获得get方法
  50. Object retVal = getMethod.invoke(obj);
  51. return retVal;
  52. }
  53. /**
  54. * 使用内省操作javabean
  55. * @param obj 属性所属的对象
  56. * @param propertyName 属性名
  57. * @return 属性的值
  58. */
  59. private static Object getProperty2(Object obj, String propertyName) throws Exception {
  60. Object retVal = null;
  61. BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
  62. PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
  63. for (PropertyDescriptor pd : pds) {
  64. if (pd.getName().equals(propertyName)) {
  65. Method getMethod = pd.getReadMethod();
  66. retVal = getMethod.invoke(obj);
  67. break;
  68. }
  69. }
  70. return retVal;
  71. }
  72. }

使用内省的方式操作JavaBean的更多相关文章

  1. 内省机制(操作javaBean的信息)

    内省机制(操作javaBean的信息) ----是不是联想到了反射机制了哈,这两者有什么区别呢? 1.内省机制和反射机制的联系 ■ 其实内省机制也是通过反射来实现的,而反射是对一切类都适合去动态获取类 ...

  2. 使用内省方式操作JavaBean

    内省,英文中称作introspector.主要对javaBean进行操作,JavaBean是一个特殊的Java类,该类中方法名符合特定的规则(其实就是getXXX,setXXX),我们一般是利用get ...

  3. java高新技术-操作javaBean

    1. 对javaBean的简单内省操作 public class IntroSpectorTest { public static void main(String[] args) throws Ex ...

  4. Linux下用文件IO的方式操作GPIO(/sys/class/gpio)

    通过sysfs方式控制GPIO,先访问/sys/class/gpio目录,向export文件写入GPIO编号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction ...

  5. Linux下用文件IO的方式操作GPIO(/sys/class/gpio)(转)

    通过sysfs方式控制GPIO,先访问/sys/class/gpio目录,向export文件写入GPIO编号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction ...

  6. Android-Sqlite-OOP方式操作增删改查

    之前写的数据库增删改查,是使用SQL语句来实现的,Google 就为Android开发人员考虑,就算不会SQL语句也能实现增删改查,所以就有了OOP面向对象的增删改查方式 其实这种OOP面向对象的增删 ...

  7. Oracle.DataAccess.dll方式操作oracle数据库

    Oracle.DataAccess.dll方式操作oracle数据库 一.查询语句: using (OracleConnection conn = new OracleConnection(Syste ...

  8. TX2 用文件IO的方式操作GPIO

    概述 通过 sysfs 方式控制 GPIO,先访问 /sys/class/gpio 目录,向 export 文件写入 GPIO 编号,使得该 GPIO 的操作接口从内核空间暴露到用户空间,GPIO 的 ...

  9. Win10 64位系统ADO方式操作数据库失败解决方法

    VC操作Access数据库一般通过ODBC.ADO.DAO等方式,但在我的Win10 64位操作系统中,通过ADO方式操作数据库会失败,无法读取数据.解决方法:1.首先确保Win10操作系统ado目录 ...

随机推荐

  1. requests.post处理Content-Type: multipart/form-data的请求

    前几天遇到一个需求,要调用一个接口发送请求,抓包之后得到的数据是这样的 上网看了一些资料得知,原来这个接口的数据是通过multipart/form-data格式传过去的,multipart/form- ...

  2. ANSI C和POSIX

    简单的说 ANSI C:标准C API(对应fopen) POSIX:方便在Linux下运行的C API(对应open)

  3. vRO 添加已有磁盘到VM

    在vRO实现将已有虚拟机磁盘添加到另外的虚拟机上,以为vRA发布Oracle/SQL集群做准备: // 脚本需要两个输入 vm_obj和diskPathSystem.log("Attempt ...

  4. Shell中数学计算/运算

    shell中的赋值和操作默认都是字符串处理. 1)使用let(只能进行整数运算)var=1let "var+=1"echo $var输出结果为2 注意:a)let几乎支持所有的运算 ...

  5. mybatis 中if标签判断boolean 的写法。

    mybatis 的if 比较标签在比较数值时可以这样写: <if test="value=0"> </if> 在比较字符串时可以这么写: <if te ...

  6. java基础(8)-集合类

    增强for循环 /* *增强for循环 * for(元素类型 变量:数据或Collection集合){ * 使用变量即可,该变量就是元素 * } * 优点:简化了数组和集合的遍历 * 缺点:增强for ...

  7. Web 应用程序项目与 Visual Studio 中的网站项目的异同

    要查看英语原文,请勾选“英语”复选框.也可将鼠标指针移到文本上,在弹出窗口中显示英语原文. 翻译 英语 本文档已存档,并且将不进行维护. Web 应用程序项目与 Visual Studio 中的网站项 ...

  8. Delphi 的 Utf-8 转换

    新版的 Delphi 應該不用這麼麻煩, 據說只要直接在 AnsiString, WideString, UTF8String 之間 assign 時就會自動幫你做轉換 (沒用過, 不知道是不是真的這 ...

  9. CentOS 7 安装 Git

    服务器端 1.先从yum安装git yum –y install git 2.在需要的位置创建一个裸仓库(最后以.git结尾) cd /usr/local mkdir git cd git git i ...

  10. html5 frameset5内嵌框架集

    利用html5 frameset内嵌框架简单做一个网页,网页的布局大体如下: 我们可以将其分为四个部分: 第一部分:top图片栏 第二部分:left链接栏 第三部分:right内容栏 第四部分:网页整 ...