wwjj4811

内省介绍

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

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

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

内省和反射区别:

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

image-20210420204247097

代码

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);
        }
    }

image-20210420210247922

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

分类:

技术点:

相关文章:

  • 2021-11-29
  • 2021-11-29
  • 2021-11-29
  • 2021-11-29
  • 2021-11-29
  • 2021-11-29
  • 2021-08-07
  • 2021-11-29
猜你喜欢
  • 2021-11-29
  • 2021-11-29
  • 2021-11-29
  • 2021-12-28
  • 2021-11-29
  • 2019-01-23
  • 2021-11-29
相关资源
相似解决方案