首页 > 编程语言 > 详细

java基础:内省Introspector机制

时间:2021-04-20 23:11:27      阅读:26      评论:0      收藏:0      [点我收藏+]

内省介绍

内省(Introspector)是Java 语言对Bean类属性、事件的一种缺省处理方法。

例如类 A 中有属性 name, 那我们可以通过 getName,setName 来得到其值或者设置新的值。通过 getName/setName 来访问 name 属性,这就是默认的规则。

Java 中提供了一套 API 用来访问某个属性的 getter/setter 方法,通过这些 API 可以使你不需要了解这个规则,这些 API 存放于包 java.beans 中。

内省和反射区别:

反射式在运行状态把Java类中的各种成分映射成相应的Java类,可以动态的获取所有的属性以及动态调用任意一个方法,强调的是运行状态。
内省机制是通过反射来实现的,BeanInfo用来暴露一个bean的属性、方法和事件,以后我们就可以操纵该JavaBean的属性。

技术分享图片

代码

javabean

public class User {

    private String name;

    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

测试方法:

    public static void main(String[] args) throws IntrospectionException {
        //获取指定字节码的属性信息(获取User类,不获取Object类)
        BeanInfo beanInfo = Introspector.getBeanInfo(User.class, Object.class);
        System.out.println("=================属性描述==================");
        //获取所有属性描述器
        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
        for (PropertyDescriptor pd : propertyDescriptors) {
            //获取属性名称
            System.out.println(pd.getName());
            //get方法,pd.getReadMethod()返回值是Method
            //所以获取Method后就可以使用反射做相关事情
            System.out.println(pd.getReadMethod());
            //set方法
            System.out.println(pd.getWriteMethod());
        }
        System.out.println("=================类描述==================");
        BeanDescriptor beanDescriptor = beanInfo.getBeanDescriptor();
        System.out.println(beanDescriptor);
        System.out.println("=================方法描述==================");
        MethodDescriptor[] methodDescriptors = beanInfo.getMethodDescriptors();
        for (MethodDescriptor md : methodDescriptors) {
            System.out.println(md);
        }
    }

技术分享图片

内省使用场景:根据属性名称得出该属性的读写方法。内省一般写业务代码的时候是用不到的,大部分是在写一些框架或者工具的时候会用到。

java基础:内省Introspector机制

原文:https://www.cnblogs.com/wwjj4811/p/14682889.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!