使用内省的方式操作JavaBean

[java] view plain copy

  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. }
时间: 2024-12-17 07:25:16

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

内省操作javabean的属性

1 import java.beans.BeanInfo; 2 import java.beans.IntrospectionException; 3 import java.beans.Introspector; 4 import java.beans.PropertyDescriptor; 5 import java.lang.reflect.Method; 6 7 import org.junit.Test; 8 9 //使用内省api操作bean的属性 10 public class D

内省 操作javaBean

一.什么是javaBean 二. 操作javaBean的意义 三.如何操作javaBean 四.使用BeanUtils 操作javaBean

内省(IntroSpector)机制---对JavaBean进行操作

核心方法: //创建属性描述器对象,参数1 是属性的名称,参数2是类字节码 PropertyDescriptor pd = new PropertyDescriptor(name, User.class); //获取get方法 Method methodR = pd.getReadMethod(); //获取参数 Object obj = methodR.invoke(user); //获取set方法 Method methodW = pd.getWriteMethod(); //设置参数 me

java高新技术-操作javaBean

1. 对javaBean的简单内省操作 public class IntroSpectorTest { public static void main(String[] args) throws Exception{ ReflectPoint pt1 = new ReflectPoint(3, 5); String propertyName = "x"; //"x" --> "X" -->"getX" -->

JSP简单练习-EL表达式操作JavaBean

/* * javaBean代码 */ package bean; public class Box { double length; double width; double height; public Box() { length=0; width=0; height=0; } public double getLength() { return length; } public void setLength(double length) { this.length = length; }

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

通过sysfs方式控制GPIO,先访问/sys/class/gpio目录,向export文件写入GPIO编号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction和value等,direction控制GPIO方向,而value可控制GPIO输出或获得GPIO输入.文件IO方式操作GPIO,使用到了4个函数open.close.read.write. 首先,看看系统中有没有"/sys/class/gpio"这个文件夹.如果没有请在编译内核的时候加入 

XML编程总结(四)——使用dom4j方式操作xml

(四)使用dom4j方式操作xml dom4j是解析XML的一种开源API,是jdom的升级品,用来读写XML文档.它具有性能优异.功能强大和极易使用的特点,它的性能超过sun公司官方的dom技术.dom4j对Xpath有良好的支持(使用xpath时需要导入jaxen的jar包),dom4j最大的特色使用大量的接口.使用dom4j时需要导入dom4j-xxx.jar包. Attribute ——Attribute定义了XML的属性 Branch ——Branch为能够包含子节点的节点如XML元素

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

通过sysfs方式控制GPIO,先访问/sys/class/gpio目录,向export文件写入GPIO编号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction和value等,direction控制GPIO方向,而value可控制GPIO输出或获得GPIO输入.文件IO方式操作GPIO,使用到了4个函数open.close.read.write. 首先,看看系统中有没有“/sys/class/gpio”这个文件夹.如果没有请在编译内核的时候加入 Devic

EasyARM i.mx28学习笔记——文件IO方式操作GPIO

0 前言 本文描述如果通过文件IO sysfs方式控制EasyARM GPIO端口.通过sysfs方式控制GPIO,先访问/sys/class/gpio目录,向export文件写入GPIO编号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction和value等,direction控制GPIO方向,而value可控制GPIO输出或获得GPIO输入. Linux学习可从应用出发,先不纠结Linux驱动编写,先把Linux给玩起来. [相关博文] [EasyARM