java内省机制Introspector

访问JavaBean属性的两种方式

1)直接调用bean的setXXX或getXXX方法;

2)通过内省技术访问(java.beans包提供了内省的API),内省技术访问也提供了两种方式:

  a)通过PropertyDescriptor类操作Bean的属性;

  b)通过Introspector类获得Bean对象的 BeanInfo,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后通过反射机制来调用这些方法。

public class Person {
    private String name; // 字段
    private String password;// 字段
    private Integer age;// 字段
    // 对字段添加了get或者set方法了,才叫做属性
    public String getXxx() {
        return "aa";
    }
    setter/getter
}

以下通过内省机制来操作Person对象。

获得类所有的属性

@Test
    public void test1() throws Exception {

        BeanInfo beanInfo = Introspector.getBeanInfo(Person.class);
        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); //得到属性描述符

        for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
            System.out.println(propertyDescriptor.getName());
        }
    }

执行结果:age  class  money  name  password  xxx

包括了从父类中继承过来的属性class

获得本类中的所有属性

@Test
    public void test2() throws Exception {
        // 剔除Object继承过来的属性
        BeanInfo beanInfo = Introspector.getBeanInfo(Person.class, Object.class);
        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();

        for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
            System.out.println(propertyDescriptor.getName());
        }
    }

操纵bean的指定属性

@Test
    public void test3() throws Exception {
        Person person = new Person();

        PropertyDescriptor propertyDescriptor = new PropertyDescriptor("age", Person.class);

        // 得到属性的写方法,为属性赋值
        Method setAgeMethod = propertyDescriptor.getWriteMethod(); // setAge
        setAgeMethod.invoke(person, 34);

        // 获取属性的值
        System.out.println(person.getAge());
        Method getAgeMethod = propertyDescriptor.getReadMethod();
        System.out.println(getAgeMethod.invoke(person, null));
    }

获取当前操作的属性的类型

@Test
    public void test4() throws Exception {
        PropertyDescriptor propertyDescriptor = new PropertyDescriptor("money",Person.class);

        Class<?> propertyType = propertyDescriptor.getPropertyType();
        System.out.println(propertyType);
    }
时间: 2024-10-18 12:52:43

java内省机制Introspector的相关文章

2-java内省机制(Introspector)

来一个简单的示例吧 package com.my.test; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import com.my.bean.User; public class Demo { /** * 刘诗华 * 内省机制(Introspector) * @param args * @throws Exception */ public s

Java 内省机制

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

java内省机制

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

【Java笔记】Java——远程监控、反射、代理、内省机制

远程控制的基本原理 远程控制(RemoteControl)拥有控制端和被控端双方. 控制方通过请求,取得对远端的操作,实现远端的事件回放功能,同时,应该看得到远端桌面的画面.而被控方必须在建立ServerSocket之后进行对外来请求的鉴听. 1 /** 2 * 客户端发送事件 3 * @param e 4 */ 5 public void sendEvent(InputEvent e){ 6 try { 7 SinglClient.getInstance().getOos().writeObj

Java读书笔记十一(Java中的内省机制)

1.前言 最近在学习Java的时候,突然发现了这个概念,鉴于好奇心的压迫,于是打算写一篇博客来总结一下. 2.什么是内省机制 为了让程序员们更好的从左Java对象的属性,SUN公司开发了一套API,就被我们称为"内省",有利于我们对类对象的属性的操作,减少了代码的数量. 3.内省和反射有什么区别 反射式在运行状态把Java类中的各种成分映射成相应的Java类,可以动态的获取所有的属性以及动态调用任意一个方法,强调的是运行状态. 内省机制是通过反射来实现的,BeanInfo用来暴露一个b

Java反射及 IoC原理、内省机制

JAVA反射及IoC原理.JAVA内省 1. 反射 反射是框架设计的灵魂,使用前提:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码文件). 1.1 反射概述 主要指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义. Java反射机制:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性. 1.2 反射机制的作用 在运行时判断任

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内省

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

Java内省详解

内省和反射有什么区别: 反射式在运行状态把Java类中的各种成分映射成相应的Java类,可以动态的获取所有的属性以及动态调用任意一个方法,强调的是运行状态.  内省机制是通过反射来实现的,BeanInfo用来暴露一个bean的属性.方法和事件,以后我们就可以操纵该JavaBean的属性. 1.通过PropertyDescriptor修改属性方式 1 public class BeanInfoUtil { 2 public static void setProperty(UserInfo user