来一个简单的示例吧

  1. package com.my.test;
  2.  
  3. import java.beans.BeanInfo;
  4. import java.beans.Introspector;
  5. import java.beans.PropertyDescriptor;
  6.  
  7. import com.my.bean.User;
  8.  
  9. public class Demo {
  10. /**
  11. * 刘诗华
  12. * 内省机制(Introspector)
  13. * @param args
  14. * @throws Exception
  15. */
  16. public static void main(String[] args) throws Exception {
  17.  
  18. //获取User类的字节码,不要获取直接父类(Object)的属性
  19. BeanInfo beanInfo = Introspector.getBeanInfo(User.class,Object.class);
  20.  
  21. //获取User类里面的所有属性描述器 返回数组
  22. PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
  23.  
  24. for (PropertyDescriptor pd : pds) {
  25. //属性字段名
  26. String name = pd.getName();
  27. //属性字段类型
  28. Class type = pd.getPropertyType();
  29.  
  30. System.out.println(name+"="+type);
  31. }
  32.  
  33. //打印结果如下显示
  34. //id=int
  35. //password=class java.lang.String
  36. //userName=class java.lang.String
  37. }
  38. }

获取Getter和Setter方法

  1. package com.my.test;
  2.  
  3. import java.beans.BeanInfo;
  4. import java.beans.Introspector;
  5. import java.beans.PropertyDescriptor;
  6. import java.lang.reflect.Method;
  7.  
  8. import com.my.bean.User;
  9.  
  10. public class Demo {
  11. /**
  12. * 刘诗华
  13. * 内省机制(Introspector)
  14. * @param args
  15. * @throws Exception
  16. */
  17. public static void main(String[] args) throws Exception {
  18.  
  19. //获取User类的字节码,不要获取直接父类(Object)的属性
  20. BeanInfo beanInfo = Introspector.getBeanInfo(User.class,Object.class);
  21.  
  22. //获取User类里面的所有属性描述器 返回数组
  23. PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
  24.  
  25. for (PropertyDescriptor pd : pds) {
  26. //获取getter方法
  27. Method readMethod = pd.getReadMethod();
  28. //获取setter方法
  29. Method writeMethod = pd.getWriteMethod();
  30.  
  31. System.out.println(readMethod);
  32. System.out.println(writeMethod);
  33. }
  34.  
  35. //打印结果如下显示
  36. // public int com.my.bean.User.getId()
  37. // public void com.my.bean.User.setId(int)
  38. // public java.lang.String com.my.bean.User.getPassword()
  39. // public void com.my.bean.User.setPassword(java.lang.String)
  40. // public java.lang.String com.my.bean.User.getUserName()
  41. // public void com.my.bean.User.setUserName(java.lang.String)
  42. }
  43. }

通过内省略机制封两个方法

  1. package com.my.javabean;
  2.  
  3. import java.beans.BeanInfo;
  4. import java.beans.Introspector;
  5. import java.beans.PropertyDescriptor;
  6. import java.util.HashMap;
  7. import java.util.Map;
  8.  
  9. import com.my.bean.User;
  10.  
  11. public class BeanUtil {
  12.  
  13. /***
  14. * Bean对象转换成Map集合
  15. * @param bean
  16. * @return
  17. * @throws Exception
  18. */
  19. public static Map<String, Object> bean2map(Object bean) throws Exception
  20. {
  21. //创建一个map集合对象
  22. Map<String, Object> map=new HashMap<String, Object>();
  23.  
  24. BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass(),Object.class);
  25. //获取Bean对象的属性描述器
  26. PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
  27. //迭代循环属性描述器
  28. for (PropertyDescriptor pd : pds) {
  29. //获取属性名
  30. String propertyName=pd.getName();
  31. //获取属性值,调用 invoke方法
  32. Object propertyValue = pd.getReadMethod().invoke(bean);
  33. //将内容存放到map集合当中
  34. map.put(propertyName, propertyValue);
  35. }
  36. return map;
  37. }
  38.  
  39. /***
  40. * 将Map集合数据封装到Bean对象当中
  41. * T代表数据类型
  42. * @param beanMap 参数Map
  43. * @param beanType Bean对象字节码
  44. * @return
  45. * @throws Exception
  46. */
  47. public static <T>T map2bean(Map<String, Object> beanMap,Class<T> beanType) throws Exception
  48. {
  49. //创建Bean对象,用T类型来接收 T是在Class<T> beanType这个参数就会确认实际类型
  50. T obj = beanType.newInstance();
  51.  
  52. BeanInfo beanInfo = Introspector.getBeanInfo(beanType,Object.class);
  53. //获取Bean对象的属性描述器
  54. PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
  55.  
  56. for (PropertyDescriptor pd : pds) {
  57. //获取属性名
  58. String propertyName=pd.getName();
  59. //从Map集合中取出数据,封装到Bean对象当中
  60. pd.getWriteMethod().invoke(obj, beanMap.get(propertyName));
  61. }
  62. return obj;
  63. }
  64.  
  65. public static void main(String[] args) throws Exception {
  66.  
  67. User u=new User(100,"刘诗华","xxx");
  68.  
  69. Map<String, Object> m = BeanUtil.bean2map(u);
  70. System.out.println(m);
  71. //{id=100, userName=刘诗华, password=xxx}
  72.  
  73. User user = map2bean(m,User.class);
  74. System.out.println(user);
  75. //User(id=100, userName=刘诗华, password=xxx)
  76. }
  77. }

2-java内省机制(Introspector)的更多相关文章

  1. java内省机制Introspector

    访问JavaBean属性的两种方式 1)直接调用bean的setXXX或getXXX方法: 2)通过内省技术访问(java.beans包提供了内省的API),内省技术访问也提供了两种方式: a)通过P ...

  2. Java内省机制

    转自: https://blog.csdn.net/hahalzb/article/details/5972421 1.java内省机制其实通俗的理解为,对自身的进行一个扫描,这个扫描的对象就是我们普 ...

  3. java内省机制及PropertyUtils使用方法

    背景 一般情况下,在Java中你可以通过get方法轻松获取beans中的属性值.但是,当你事先不知道beans的类型或者将要访问或修改的属性名时,该怎么办?Java语言中提供了一些像java.bean ...

  4. Java 内省机制

    一.内省 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法.JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的 ...

  5. 就改了get,却不让我set?——Java内省机制的神奇行为举止一例

    [相关类库]org.apache.commons.beanutils.BeanUtils,提供对Java反射和自省API的包装,其中底层使用到了Java的内省方法.[内省的一般应用形式]通过类Intr ...

  6. java 内省(Introspector)

    开发框架时,经常需要使用java对象的属性来封装程序的数据,每次都使用反射技术完成此类操作过于麻烦,所以sun公司开发了一套API,专门用于操作java对象的属性. 当然你也可以用反射来操作JavaB ...

  7. Java的内省机制

    我现在的理解就是,Java的内省机制就是针对JavaBean的,可以获取到类的属性名称,以及属性的Getter和Setter方法,应该是在写框架的时候才会用到内省机制,还有一个地方可以用到内省机制,就 ...

  8. 01-Introspector内省机制

    在java领域编程中,内省机制相当的不错,可以省去我们程序员很多的不必要的代码 比如说:在jdbc工具类 我们可以将ResultSet结果集待到 javabean对象中 将http请求报文的数据 转换 ...

  9. 【小家Spring】Spring IoC是如何使用BeanWrapper和Java内省结合起来给Bean属性赋值的

    #### 每篇一句 > 具备了技术深度,遇到问题可以快速定位并从根本上解决.有了技术深度之后,学习其它技术可以更快,再深入其它技术也就不会害怕 #### 相关阅读 [[小家Spring]聊聊Sp ...

随机推荐

  1. awesome-workflow-engines

    转自:https://github.com/meirwah/awesome-workflow-engines awesome-workflow-engines A curated list of aw ...

  2. Singer 开源便捷的ETL 工具

    singer 是一个强大,灵活的etl 工具,我们可以方便的提取web api,file,queue,基本上各种你可以想到的 数据源. singer 有一套自己的数据处理规范, taps, targe ...

  3. oracle-sql系统学习-ddl-dml

    e41084-04 oracle database sql language reference 11g release 2 sql语句类型 ddl alter ...除了alter session和 ...

  4. openstack--1--基础环境搭建

    Openstack介绍 OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目. Openstack包含三大项 ...

  5. AI大牛阿里VP贾扬清

    贾扬清生长于浙江绍兴,2002年考入清华,并在清华拿到硕士学位,其后远赴UC伯克利获得博士学位. 2013年,贾扬清博士毕业加入之前就已实习了2年的Google,在Jeff Dean麾下任职,参与Te ...

  6. mina学习总结

    一.简介: Apache Mina Server 是一个网络通信应用框架,Mina 可以帮助我们快速开发高性能.高扩展性的网络通信应用,Mina 提供了事件驱动.异步(Mina 的异步 IO 默认使用 ...

  7. Redis 可视化界面工具:Fastoredis

    下载地址:https://sourceforge.net/projects/fastoredis/

  8. jstack实战死循环与死锁学习笔记

    一.实战死循环导致CPU飙高 top -p pid -H jstack pid printf "%s"  十进制的线程id 二.创建CUP100%实例(死循环) 1.创建CpuCo ...

  9. Java ThreadPoolTaskExecutor使用

    1. 配置 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http:/ ...

  10. hadoop append 追加文件错误

    java.io.IOException:Failed to replace a bad datanode on the existing pipeline due to no more good da ...