Java 内省

简介: PropertyDescriptor:属性描述符,能够描述javaBean中的属性,通过属性描述符我们能知道这个属性的类型,获取到操纵属性的方法(getter/setter)

网络异常,图片无法展示
|

网络异常,图片无法展示
|


何为 JavaBean ?


一种特殊的类、主要用于传递数据信息、这种类中的方法主要用于访问私有的字段、且方法符合某种命名规则。


JavaBean 的特征

  1. 属性都是私有的
  2. 存在无参构造方法
  3. 私有属性的 getter/setter 方法分别为 getXxx/setXxx
  4. getter 方法必须有返回值且无入参、setter 方法必须有入参且无返回值

符合这些特征的类、称为 JavaBean。

JDK 提供了一套 API 用来访问某个属性的 getter/setter 方法、这个就是 Java 内省。

内省与反射

反射:JVM 在运行的时、对任意的一个对象、都能访问到这个类的属性和方法。

内省 Introspector:是 Java 语言对 JavaBean 属性、事件的处理方式

  1. 反射针对的是任何类、任何对象、而内省只是针对 JavaBean。内省通过反射来操作 JavaBean 的属性。
  2. 内省设置属性值肯定调用 setter 方法、而反射则不一定 (Field 对象)
  3. 反射就像是镜子、能看到对象的所有、是客观事实。内省更像是主观判断、比如看到 getClass()、内省就会认为这个类中有 class 字段、但事实上则不一定。

例子

public class Main {
    public static void main(String[] args) throws Exception{
        BeanInfo beanInfo = Introspector.getBeanInfo(People.class);
        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
        for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
            System.out.print(propertyDescriptor.getName()+"   ");
        }
    }
    // 程序输出:age   class   name 
    // 为什么会输出class呢?前文中有提到,“看到getName(),内省就会认为这个类中有name字段,但事实上并不一定会有name”,我们知道每个对象都会有getClass方法,所以使用内省时,默认就认为它具有class这个字段
}
class People{
    String name;
    int age;
  public String getName() {
      return name;
  }
  public void setName(String name) {
      this.name = name;
  }
  public int getAge() {
      return age;
  }
  public void setAge(int age) {
      this.age = age;
  }
}
复制代码

PropertyDescriptor:属性描述符,能够描述javaBean中的属性,通过属性描述符我们能知道这个属性的类型,获取到操纵属性的方法(getter/setter)


目录
相关文章
|
Java API
20 Java 使用反射(Reflection) 和内省技术
反射(Reflection)是程序的自我分析能力,通过反射可以确定类有哪些方法、有哪些构造方法以及有哪些成员变量。Java语言提供了反射机制,通过反射机制能够动态读取一个类的信息;能够在运行时动态加载类,而不是在编译期。反射可以应用于框架开发,它能够从配置文件中读取配置信息动态加载类、创建对象,以及调用方法和成员变量。
109 0
|
缓存 Java Spring
聊聊Java内省Introspector
这篇文章主要分析一下Introspector(内省,应该读xing第三声,没有找到很好的翻译,下文暂且这样称呼)的用法。Introspector是一个专门处理JavaBean的工具类,用来获取JavaBean里描述符号,常用的JavaBean的描述符号相关类有BeanInfo、PropertyDescriptor,MethodDescriptor、BeanDescriptor、EventSetDescriptor和ParameterDescriptor。下面会慢慢分析这些类的使用方式,以及Introspector的一些特点。
180 0
聊聊Java内省Introspector
|
XML 搜索推荐 Java
Spring IoC是如何使用BeanWrapper和Java内省结合起来给Bean属性赋值的【享学Spring】(下)
Spring IoC是如何使用BeanWrapper和Java内省结合起来给Bean属性赋值的【享学Spring】(下)
|
Java Spring 容器
Spring IoC是如何使用BeanWrapper和Java内省结合起来给Bean属性赋值的【享学Spring】(上)
Spring IoC是如何使用BeanWrapper和Java内省结合起来给Bean属性赋值的【享学Spring】(上)
Spring IoC是如何使用BeanWrapper和Java内省结合起来给Bean属性赋值的【享学Spring】(上)
|
存储 缓存 Java
聊聊Spring中的数据绑定 --- BeanWrapper以及Java内省Introspector和PropertyDescriptor【享学Spring】(下)
聊聊Spring中的数据绑定 --- BeanWrapper以及Java内省Introspector和PropertyDescriptor【享学Spring】(下)
聊聊Spring中的数据绑定 --- BeanWrapper以及Java内省Introspector和PropertyDescriptor【享学Spring】(下)
|
缓存 Java 数据库连接
聊聊Spring中的数据绑定 --- BeanWrapper以及Java内省Introspector和PropertyDescriptor【享学Spring】(上)
聊聊Spring中的数据绑定 --- BeanWrapper以及Java内省Introspector和PropertyDescriptor【享学Spring】(上)
|
Java Shell API
大多数人不知道的Java知识 - Java内省机制
大多数人不知道的Java知识 - Java内省机制
|
安全 Java API
java的反射用不好容易走火入魔?还可以用内省啊!
使用内省相对于直接使用反射更加安全可靠,Java的反射机制比较特殊,它不同于一般的编程方式,稍不小心就容易破坏类的封装性。练的不好,就容易走火入魔。没关系,很多时候我们还可以使用Java的内省机制哦。 本文会讲Java的内省机制是什么和怎么使用。
java的反射用不好容易走火入魔?还可以用内省啊!
|
存储 Dubbo Java
Java反射与内省
Java反射与内省
|
Java Spring
【小家Spring】Spring IoC是如何使用BeanWrapper和Java内省结合起来给Bean属性赋值的
【小家Spring】Spring IoC是如何使用BeanWrapper和Java内省结合起来给Bean属性赋值的前言书写此篇博文的缘由是出自一道面试题:面试题目大概如标题所述。我个人认为这道面试题问得是非常有水平的,因为它涉及到的知识点既有深度,又有广度,可谓一举两得~~~因此在这里分享给大家。
887 0