java内省Introspector

大纲:

  1. JavaBean 规范
  2. 内省

一、JavaBean 规范

JavaBean —般需遵循以下规范。

  1. 实现 java.io.Serializable 接口。
  2. javaBean属性是具有getter/setter方法的private成员变量。也可以只提供getter方法,这样的属性叫只读属性;也可以只提供setter方法,这样的属性叫只写属性。
  3. JavaBean 必须有一个空的构造函数
  4. JavaBean 必须有一个public构造函数

二、内省

  • 首先内省的本质也是利用反射
  • 通过内省可以快速拿到javaBean变量的getter与setter,从而快速操作bean对象。

测试用javaBean

public class Person {
    private String name ;
    private int age ;
    public void say(){
    }

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

1.可以通过BeanInfo对象拿到JavaBean类中所有属性和方法的描述器

    public static void main(String[] args) throws Exception {
        //获取BeanInfo对象,主要用于获取javaBean的属性描述器
        BeanInfo beanInfo = Introspector.getBeanInfo(Person.class);
        //方法描述器
        MethodDescriptor[] methodDescriptors = beanInfo.getMethodDescriptors();
        //属性描述器
        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
        //测试对象
        Person person = new Person();

        for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
            //属性名
            System.out.println("Person的属性:"+propertyDescriptor.getName());
            if("name".equals(propertyDescriptor.getName())){
                //属性读方法
                Method readMethod = propertyDescriptor.getReadMethod();
                //属性的写方法
                Method writeMethod = propertyDescriptor.getWriteMethod();
                writeMethod.invoke(person,"xiaoming");
                System.out.println("person的name:"+readMethod.invoke(person));
                Class<?> propertyType = propertyDescriptor.getPropertyType();
                System.out.println("属性的类型:"+propertyType.getName());
            }
        }
    }

2.直接获取某个属性的描述器

    public static void main(String[] args) throws Exception {
        Person p = new Person();
        //直接通过名称获取属性描述器
        //获取name属性的描述器,方便我们直接操作p对象的name属性。
        PropertyDescriptor descriptor = new PropertyDescriptor("name", Person.class);
        Method writeMethod = descriptor.getWriteMethod();
        writeMethod.invoke(p,"nananan");
        System.out.println("person对象name:"+descriptor.getReadMethod().invoke(p));
    }

原文地址:https://www.cnblogs.com/liuboyuan/p/11120481.html

时间: 2024-10-10 20:47:02

java内省Introspector的相关文章

Java 内省 Introspector

操纵类的属性,有两种方法 反射 内省 面向对象的编程中,对于用户提交过来的数据,要封装成一个javaBean,也就是对象 其中Bean的属性不是由字段来决定的,而是由get和Set方法来决定的 public class Person { private String name ; private String password; private int age; public String getName() { return name; } public void setName(String

java内省(Introspector)

内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则.如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为"值对象"(Value Object),或"VO".方法比较少.这些信息储存在类的私有变量中,通过set().get()获得 Java JDK中提供了一套 API 用来访

Java:内省(Introspector)深入理解

内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则.如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为"值对象"(Value Object),或"VO".方法比较少.这些信息储存在类的私有变量中,通过set().get()获得. 例如类UserInfo : package

深入理解Java:内省(Introspector)

内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则.如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为"值对象"(Value Object),或"VO".方法比较少.这些信息储存在类的私有变量中,通过set().get()获得. 例如类UserInfo : package

Java:内省(Introspector)

内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则.如果在两个模块之间传递信 息,可以将信息封装进JavaBean中,这种对象称为“值对象”(Value Object),或“VO”.方法比较少.这些信息储存在类的私有变量中,通过set().get()获得. 例如UserInfo public class UserInfo {

Java内省

大家都知道,Java给我提供了反射机制,使我们可以获取到每一个类的每一个属性和方法,并对此进行操作.但是利用反射来操作对象时过于麻烦,所以sun公司就基于反射机制给大家提供了一个更加简单实用的api,那就是内省(Introspector),而内省这套api将会使我们操作JavaBean的属性更加方便. 1.什么是Javabean? ①类必须是公共的 ②类必须具备无参构造器 2.什么是Javabean的属性? 要理解内省的概念,我们先来理解一下什么叫Javabean的属性,下面我们猜下该Javab

内省(Introspector)

内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则.如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为"值对象"(Value Object),或"VO".方法比较少.这些信息储存在类的私有变量中,通过set().get()获得. 例如类UserInfo : package

内省Introspector(反射操作javaBean)

一:内省是一种特殊的反射,来更方便的操作javaBean对象,通过内省可以获取到类字节码的描述器, 然后解剖每一个字段,获取每个字段的读写方法,即get/set方法的反射,然后获取或者是封装bean的value 下面是通过内省向Bean中set值得示例: public static <T> T toBean(T t){ Class<?> clazz = t.getClass(); try { //根据Class对象获取该类的BeanInfo信息 BeanInfo beanInfo

java内省机制

一.概念 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则.如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为“值对象”(Value Object),或“VO”.方法比较少.这些信息储存在类的私有变量中,通过set().get()获得.通俗地讲,每一对set/get方法都是对应的javaBean的一