java的自省机制_JAVA内省(自省)机制 ( Introspector , BeanInfo, PropertyDescriptor )

目的和作用: 通过内省,获取和操作javaBean中的成员信息(方法,事件,属性)。

—————————————————-内省使用的核心类(接口)———————————————————–

Java.beans.Introspector –工具类,通过 Introspector 类就可以获取和操作javaBean中的属性、事件和方法。(static BeanInfo)getBeanInfo(Class> beanClass)

通过 某个类.class的字节码对象 获取 JavaBean,返回 beanInfo对象— eg : getBeanInfo(类.class , Object.class ) 包括类.class,但不包括Object.class

java.beans.beanInfo—Bean的描述对象,可以通过它取得Bean内部的信息。(MethodDescriptor[ ]) getMethodDescriptors()

获得 beans 方法描述符(PropertyDescriptor[ ]) getPropertyDescriptors()

获取javaBaen中所有属性的描述器 ( 描述属性的信息 )

java.beans.PropertyDescriptor— Bean的属性描述器,它提供了一系列对Bean属性进行操作的方法(Method) getReadMethod()

获得 get 属性值的方法。 之后可以用反射 Method.invoke()(Method) getWriteMethod()

获得 set 属性值的方法。(String) getName()

获得属性名称。(Class) getPropertyType()

获得属性的类型 eg : class: java.lang.String

一般步骤:通过类 Introspector来获取某个对象的 BeanInfo 信息

然后通过 BeanInfo来获取属性的描述器 PropertyDescriptor

通过这个属性描述器就可以获取某个属性对应的 getter/setter方法,然后我们就可以通过反射机制来调用这些方法。edcffa6939f0bde18fce0693d606eebc.png56c7257e26cb89106472abe53ce9e2ab.png

反射和内省的区别:

反射反射就是运行时获取一个类的所有信息,可以获取到.class的任何定义的信息(包括成员 变量,成员方法,构造器等)可以操纵类的字段、方法、构造器等部分。

内省:内省基于反射实现,主要用于操作JavaBean,通过内省 可以获取bean的getter/setter

生活中 反射就像我们照镜子,照镜子时候 你的所有信息会毫无出错毫无保留的反射到镜子中,而java中反射就像是运行时用一把镜子去照.class字节码 将这个类的所有信息照出来,‘照’出的结果是客观的,是正确的;

内省就像我们反省自己,通常我们是针对犯错而进行反省,根据所犯错误反省总结出结论,这个结论是主观的,不一定正确的,有时候你觉得你自己做错了,但可能事实上自己无可厚非。java中内省,是针对javaBean进行的,目的是为了找出bean的getter和setter以便操作这个bean。只要看到有getter或者setter 就认为这个类有那么一个字段,比如看到getName() 内省就会认为这个类中有name字段,但事实上并不一定会有name;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值