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. OC_NSString、

    8月17日NSString 一.字符串的创建 //1.创建常量字符串 NSString *str1 = @"hello world"; NSLog(@"%@", ...

  2. linux下安装编译网卡驱动的方法

    安装linux操作系统后发现没有网卡驱动,表现为 system → Administration → Network下Hardware列表为空. 以下为安装编译网卡驱动的过程,本人是菜鸟,以下是我从网 ...

  3. windows环境下安装部署并启用zkui的web图形界面

    在此之前的工作:不是本机部署的三个服务器最为伪集群的zookeeper环境,并将三个为服务启动起来. 然后才有了下面的工作. 1. 首先,zkui项目地址:https://github.com/Dee ...

  4. MyEclipse Could not create the view: An unexpected exception was thrown解决方案

    问题:电脑突然断电,myeclipse非正常关闭,“Package Explorer”非正常显示,出现错误“Could not create the view: An unexpected excep ...

  5. Android 开发人员必须掌握的 10 个开发工具

    Android 开发人员必须掌握的 10 个开发工具 Android SDK 本身包含很多帮助开发人员设计.开发.测试和发布 Android 应用的工具,在本文中,我们将讨论 10 个最常用的工具. ...

  6. volatile的特性

    volatile的特性 当我们声明共享变量为volatile后,对这个变量的读/写将会很特别.理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个监视器锁对这 ...

  7. PHP 学习(一)——课程介绍

    一.课程路线介绍 教程的学习路线按照:初级——>中级——>高级——>项目实做 初级: 中级: 高级: 项目实做: 整体: Php体系了解:

  8. Can't connect to MySQL server on 'localhost' (10061)的解决办法!

    Can't connect to MySQL server on 'localhost' (10061)的解决办法! http://blog.sina.com.cn/s/blog_52ebca1f01 ...

  9. Vue 什么是组件

    Vue.js组件 组件的作用:组件是自定义元素,可扩展html元素,封装可复用的代码. 组件的注册一定要在初始化根实例之前,负责组件是不起作用的. 全局组件在初始化实例的时候被使用 局部组件仅在实例/ ...

  10. Educational Codeforces Round 15 A, B , C 暴力 , map , 二分

    A. Maximum Increase time limit per test 1 second memory limit per test 256 megabytes input standard ...