Introspector 是一个专门处理bean的工具类.用来获取Bean体系里的 propertiesDescriptor,methodDescriptor.

要理解这个,就要理解下面几个议题.

*bean是啥?

普通的class 可能有 computerAges(){ }等方法.
Bean是 一个field ,有 get 或者set. 除了这些别无其他.
bean是class的一种
例如 public class People {
String name;
public String getName(){
}
public void setName(String name){
}

}
*Bean在jdk里对应的的概念
BeanInfo , 他包含了Bean所有的descriptor(描述符) .
BeanDescriptor PropertiesDescriptor MethodDescriptor
*  一个类的属性field 和 propertiesDescriptor(描述)有什么区别.

propertiesDescriptor,它来至于 对Method的解析.
如果是严格的Bean.例如上面的People. field一个叫做name, propertiesDescriptor 只有一个,刚好也是name, 来自set和get的解析, 解析出来都是       name.,所有两个merge为一个. 
详细逻辑见Introspector中代码.见附件
*  反射的method和bean概念体系里的methodDescriptor的区别
2:1的对应关系. People里有set和get两个方法,反射得到两个Method,但这两个method会组合成一个MethodDescriptor. 
*  Introspector内省 和 反射的区别和关系?
Introspector 是一个专门处理bean的工具类.用来获取Bean体系里的 propertiesDescriptor,methodDescriptor.
利用反射获取Method信息,是反射的上层. 
性能优化: 只进行一次反射解析. 通过WeakReference静态类级别缓存Method, 在jvm不够时会被回收.  
// Static Caches to speed up introspection.
private static Map declaredMethodCache = Collections.synchronizedMap(new WeakHashMap());
附件1:
解析method得到properties,并且合并同名的properties.
把 method根据 解析出的properties放入的map中,将 setMethod和 getMethod合并成一个 methodDescriptor
见 Introspector.java的

/**
* Populates the property descriptor table by merging the
* lists of Property descriptors.
*/

private void processPropertyDescriptors() {

...
// Complete simple properties set 
pd = mergePropertyDescriptor(gpd, spd); //merge get方法解析出的gpd和set方法解析出的spd . 一个PropertyDescriptor里面有两个属性,一个是setMethodName,一个是getMethodName.
                 

....
properties.put(pd.getName(), pd);  
/**
* Adds the property descriptor to the indexedproperty descriptor only if the
* types are the same.
*
* The most specific property descriptor will take precedence.
*/
private PropertyDescriptor mergePropertyDescriptor(IndexedPropertyDescriptor ipd,

PropertyDescriptor pd) {

}
PropertyDescriptor里的 private Reference<Class> propertyTypeRef; 里的值决定了type, 距离, int string等类型.

转载于:https://www.cnblogs.com/zjj1996/p/9139700.html

Introspector内省和反射的区别.相关推荐

  1. java内省的意思_java内省和反射的区别

    展开全部 经过多方面的资料搜集整理,写下了这篇文章,本文主要讲解java的反射和内e68a843231313335323631343130323136353331333363366237省机制,希望对 ...

  2. java内省的意思,java内省机制 + 内省是什么 + 内省实现方式 + 和反射的区别

    见:https://zhidao.baidu.com/question/434288330.html.http://blog.csdn.net/u014394715/article/details/5 ...

  3. JAVA的内省机制(introspector)与反射机制(reflection)

    http://yangzhibin-java.iteye.com/blog/452068 JAVA的内省机制(introspector)与反射机制(reflection) 博客分类: j2se Jav ...

  4. java内省和反射机制_Java内省和反射机制三步曲之 - 内省

    经过多方面的资料搜集整理,写下了这篇文章,本文主要讲解java的反射和内省机制,希望对大家有点帮助,也希望大家提出不同的看法! 1).内省(Introspector)是 Java 语言对 Bean 类 ...

  5. java 内省_Java反射与内省

    反射 用一句比较白的话来概括,反射就是让你可以通过名称来得到对象(类,属性,方法)的技术. 例如我们可以通过类名来生成一个类的实例:知道了方法名,就可以调用这个方法:知道了属性名就可以访问这个属性的值 ...

  6. java 反射 new区别_JAVA的newInstance()和new的区别(JAVA反射机制,通过类名来获取该类的实例化对象)...

    1.在初始化一个类,生成一个实例的时候:newInstance() 和 new 有什么区别? 用newInstance与用new是区别的,区别在于创建对象的方式不一样,前者是使用类加载机制,那么为什么 ...

  7. java内省有什么作用_Java内省

    1.  什么是内省? 内省(Introspector)是Java语言对JavaBean类属性.事件的处理方法. 例如类User中有属性name,那么必定有getName,setName方法,我们可以通 ...

  8. java内省技术,Java内省技术

    一.什么是内省 在计算机科学中,内省是指计算机程序在运行时(Run time)检查对象(Object)类型的一种能力,通常也可以称作运行时类型检查. 不应该将内省和反射混淆.相对于内省,反射更进一步, ...

  9. 详叙BeanWrapper和PropertyDescriptor

    每篇一句 千古以来要饭的没有要早饭的,知道为什么吗? 相关阅读 [小家Spring]聊聊Spring中的数据转换:Converter.ConversionService.TypeConverter.P ...

最新文章

  1. 给大家分享一个私藏已久的Python神器!
  2. 计算机视觉顶尖期刊和会议的段子
  3. Redis 高级主题之布隆过滤器(BloomFilter)
  4. 人脸识别经典算法一:特征脸方法(Eigenface)
  5. PowerPC汇编指令集
  6. HTTPS协议之SSL/TLS协议四次握手
  7. linux中yum怎么安装服务器,yum安装(linux如何安装yum)
  8. php 从字符中随机挑一个数,php 对中文字符串的处理- 随机取出指定个数的汉字...
  9. QT: 使用qtchooser修改ubuntu默认的qmake版本
  10. 列表,元组和range
  11. 小屏党失望!iPhone 13四款机型,mini版没了
  12. java的中文源代码
  13. 单片机开发系列(一)之Keil 5 安装使用教程
  14. 《赖氏经典英语语法》练习三 关系词
  15. SpringCloud平滑升级/优雅停机
  16. Python反爬机制-验证码
  17. pvs linux_Linux下用于C ++开发的PVS-Studio静态分析器入门
  18. 语法分析程序--编译原理
  19. vue初始安装及项目初启动
  20. Android中Settings.System的使用

热门文章

  1. 【2017-03-09】SQL Server 数据库基础、四种约束
  2. 【创业】创业团队的那些事(二)
  3. freemarker常见语法大全
  4. node --- [node接口阅读]cluster的使用
  5. 微信小程序教程02:App(Object)和Page(Object) 构造器介绍
  6. Windows和Linux如何使用Java代码实现关闭进程
  7. 如何选择合适的监视器?
  8. java 读取properties文件
  9. zabbix2.2.3 VMware Vsphere exsi监控配置步骤
  10. [XMOVE自主设计的体感方案] XMove Studio管理系统(二)应用开发API简要介绍