一、解释
Introspector  内省,自我检查。
位于java中的java.beans包中,其原文说明文为:
  1. The Introspector class provides a standard way for tools to learn about the properties, events, and methods supported by a target Java Bean.
中文大意为
  1. Introspector提供了一种标准的方式作为工具来获取类的属性,时间,方法。
通常用在反射中,查看类的内部信息。
以下为收集到的一个,空间换时间的反射类。
  1. // 类属性缓存,空间换时间
  2. private static final ConcurrentMap, PropertyDescriptor[]> classPropCache =
  3. new ConcurrentHashMap, PropertyDescriptor[]>(64);
  4. /**
  5. * 获取Bean的属性
  6. * @param bean
  7. * @return
  8. */
  9. private static PropertyDescriptor[] getPropertyDescriptors(Object bean) {
  10. Class beanClass = bean.getClass();
  11. PropertyDescriptor[] cachePds = classPropCache.get(beanClass);
  12. if (null != cachePds) {
  13. return cachePds;
  14. }
  15. try {
  16. BeanInfo beanInfo = Introspector.getBeanInfo(beanClass);
  17. cachePds = beanInfo.getPropertyDescriptors();
  18. classPropCache.put(beanClass, cachePds);
  19. return cachePds;
  20. } catch (IntrospectionException e) {
  21. throw new RuntimeException(e);
  22. }
  23. }
  24. /**
  25. * 获取Bean的属性
  26. * @param bean bean
  27. * @param propertyName 属性名
  28. * @return 属性值
  29. */
  30. public static Object getProperty(Object bean, String propertyName) {
  31. PropertyDescriptor[] beanPds = getPropertyDescriptors(bean);
  32. for (PropertyDescriptor propertyDescriptor : beanPds) {
  33. if (propertyDescriptor.getName().equals(propertyName)){
  34. Method readMethod = propertyDescriptor.getReadMethod();
  35. if (null == readMethod) {
  36. continue;
  37. }
  38. if (!readMethod.isAccessible()) {
  39. readMethod.setAccessible(true);
  40. }
  41. try {
  42. return readMethod.invoke(bean);
  43. } catch (Throwable ex) {
  44. throw new RuntimeException("Could not read property '" + propertyName + "' from bean", ex);
  45. }
  46. }
  47. }
  48. return null;
  49. }
  50. /**
  51. * 设置Bean属性
  52. * @param bean bean
  53. * @param propertyName 属性名
  54. * @param value 属性值
  55. */
  56. public static void setProperty(Object bean, String propertyName, Object value) {
  57. PropertyDescriptor[] beanPds = getPropertyDescriptors(bean);
  58. for (PropertyDescriptor propertyDescriptor : beanPds) {
  59. if (propertyDescriptor.getName().equals(propertyName)){
  60. Method writeMethod = propertyDescriptor.getWriteMethod();
  61. if (null == writeMethod) {
  62. continue;
  63. }
  64. if (!writeMethod.isAccessible()) {
  65. writeMethod.setAccessible(true);
  66. }
  67. try {
  68. writeMethod.invoke(bean, value);
  69. } catch (Throwable ex) {
  70. throw new RuntimeException("Could not set property '" + propertyName + "' to bean", ex);
  71. }
  72. }
  73. }
  74. }


Java反射 Introspector的更多相关文章

  1. JAVA内省(Introspector)

    什么是Java内省:内省是Java语言对Bean类属性.事件的一种缺省处理方法. Java内省的作用:一般在开发框架时,当需要操作一个JavaBean时,如果一直用反射来操作,显得很麻烦:所以sun公 ...

  2. java 反射,注解,泛型,内省(高级知识点)

     Java反射 1.Java反射是Java被视为动态(或准动态)语言的一个关键性质.这个机制允许程序在运行时透过Reflection APIs    取得任何一个已知名称的class的内部信息, 包括 ...

  3. Java 内省 Introspector

    操纵类的属性,有两种方法 反射 内省 面向对象的编程中,对于用户提交过来的数据,要封装成一个javaBean,也就是对象 其中Bean的属性不是由字段来决定的,而是由get和Set方法来决定的 pub ...

  4. Java反射机制详解(3) -java的反射和代理实现IOC模式 模拟spring

    IOC(Inverse of Control) 可翻译为“控制反转”,但大多数人都习惯将它称为“依赖注入”.在Spring中,通过IOC可以将实现类.参数信息等配置在其对应的配置文件中,那么当 需要更 ...

  5. Java 反射和内省实现spring的IOC和DI

    1.构造两个JavaBean package com.spring.model; public class People { private Car car; public Car getCar() ...

  6. java反射知识点总结

    一.java反射基础 1.1 什么叫java反射? 答:程序运行期间,动态的获取类的基本信息.比如:创建对象,调用类的方法,获得类的基本结构.这样给程序设计提供了很大的灵活性.个人总结就是:根据动态需 ...

  7. Java反射之对JavaBean的内省操作

    上一篇我们说了Java反射之数组的反射应用 这篇我们来模拟实现那些javabean的框架(BeanUtils)的基本操作. [一] 什么是JavaBean JavaBean 是一种JAVA语言写成的可 ...

  8. 第28章 java反射机制

    java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...

  9. Java反射机制

    Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射:     静态编译:在编译时确定类型,绑定对象,即通过 ...

随机推荐

  1. idea svn 使用问题

    一开始死活提交不上 解决方式 : 勾上use command line client

  2. idea 提示忽略大小写

  3. 基于jQuery图片元素网格布局插件

    基于jQuery图片元素网格布局插件是一款可以将图片或HTML元素均匀分布排列为网格布局的jQuery插件jMosaic.效果图如下: 在线预览   源码下载 实现的代码. html代码: <c ...

  4. [转]【MySQL】关于时间的查询,比如本月,本年,本季度

    原文地址:https://www.cnblogs.com/flydkPocketMagic/p/7089324.html -- mysql查询本季度 -- 今天 select * from ticke ...

  5. ubuntu 14.04 gitlab 的搭建

    经过两天的尝试,gitlab 终于在 ubuntu14.04 上面搭建起来. 一.安装相关软件. // 执行如下命令: sudo apt-get install vim git curl openss ...

  6. Linux里提示cannot find -lsocket解决办法

    今天在我的Linux make时提示我找不到 -lsocket,我就去lib库里查了一下,根本没有这个东东,然后在网上看了好多都是说缺少这个库要安装,或是要改libsock.so,试了半天都没有用. ...

  7. WCF安全:通过 扩展实现用户名密码认证

    在webSservice时代,可以通过SOAPHEADER的方式很容易将用户名.密码附加到SOAP header消息头上,用户客户端对调用客户端身份的验证.在WCF 时代,也可以通过Operation ...

  8. 微信怎样做SEO

    微信也能做SEO.大家还不知道吧?今天上海SEO优化公司就和大家解说在微信上要怎么做SEO优化. 微信也有SEO?你会不会觉得我是说笑呢.事实上还就是.我也找不到什么好名词来介绍公众号上的排名,就用微 ...

  9. 【jquery】fancybox 是一款优秀的 jquery 弹出层展示插件

    今天给大家分享一款优秀的 jquery 弹出层展示插件 fancybox.它除了能够展示图片之外,还可以展示 flash.iframe 内容.html 文本以及 ajax 调用,我们可以通过 css ...

  10. 【Python】 tempfile模块 临时文件和目录的处理

    [tempfile] 惊奇地又发现了一个比较有意思的小模块. 在一些场景中我们经常需要自动生成一些临时文件,当然用简单的open函数,来创建一个隐藏文件可以实现.不过tempfile这个模块把一些有的 ...