内省是 Java 语言对 Bean 类属性、事件的一种缺省处理方法。例如类 A

中有属性 name, 那我们可以通过 getName,setName 来得到其值或者设置新的值。

通过 getName/setName 来访问 name 属性,这就是默认的规则。 Java 中提供了一

套 API 用来访问某个属性的 getter/setter 方法,通过这些 API 可以使你不需要

了解这个规则(但你最好还是要搞清楚),这些 API 存放于包 java.beans 中。

java内省实例演示

一般的做法是通过类 Introspector 来获取某个对象的 BeanInfo 信息,然

后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性

描述器就可以获取某个属性对应的 getter/setter 方法,然后我们就可以通过反射

机制来调用这些方法。下面我们来看一个例子,这个例子把某个对象的所有属性名称

和值都打印出来,可以分为以下几个步骤:

1,通过Introspector类获得Bean对象的 BeanInfo, 然后通过

BeanInfo 来获取属性的描述器( PropertyDescriptor )

2,通过这个属性描述器就可以获取某个属性对应的

getter/setter 方法

3,然后通过反射机制来调用这些方法。

package com.ztc.introspector;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import org.junit.Test;

public class Demo1 {

@Test
public void test1() throws Exception{
BeanInfo info = Introspector.getBeanInfo(Person.class,Object.class);
PropertyDescriptor[] propertyDescriptors = info.getPropertyDescriptors();
for(PropertyDescriptor pd : propertyDescriptors){
System.out.println(pd.getName());
}

}

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

Method method = propertyDescriptor.getWriteMethod();
Person p = (Person) Class.forName("cn.com.introspector.Person").newInstance();
method.invoke(p, 15);

System.out.println(propertyDescriptor.getReadMethod().invoke(p, null));
}

@Test
public void test3()throws Exception{
Person p = (Person) Class.forName("cn.com.introspector.Person").newInstance();
PropertyDescriptor propertyDescriptor =new PropertyDescriptor("age", Person.class);
System.out.println(propertyDescriptor.getPropertyType());

}

}

javabean的内省(Introspector)的更多相关文章

  1. JavaBeans与内省(Introspector)

    JavaBean与Introspector 反射和内省操作很多时候都是在以后要做框架的时候作用非常大.    现在你学的是面向对象编程,即:你所写代码都能够找到对应的类或接口,找到具体的方法写出对应的 ...

  2. 内省(introspector)------>JavaBean

    内省(introspector)------>JavaBean    1.问什么要学内省?        开发框架时,经常需要Java对象的属性来来封装程序的数据,每次使用反射技术完成此操作过于 ...

  3. 内省(Introspector)

    内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法 目的:主要用于传递数据信息,这种类中的方法主要用于访问私有的字段(且方法名符合某种命名规则) p ...

  4. JavaBean和内省

    JavaBean和内省 JavaBean是一个遵循特定的写法的java类     1. 必须有一个无参的构造方法     2.属性私有化     3.私有你给的属性必须通过public类型的方法暴露给 ...

  5. 深入理解Java:内省(Introspector)

    深入理解Java:内省(Introspector) 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传 ...

  6. Java:内省(Introspector)

    内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且 ...

  7. JAVAWEB开发之Session的追踪创建和销毁、JSP具体解释(指令,标签,内置对象,动作即转发和包括)、JavaBean及内省技术以及EL表达式获取内容的使用

    Session的追踪技术 已知Session是利用cookie机制的server端技术.当client第一次訪问资源时 假设调用request.getSession() 就会在server端创建一个由 ...

  8. JAVA中反射机制五(JavaBean的内省与BeanUtils库)

    内省(Introspector) 是Java 语言对JavaBean类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法 ...

  9. Java 内省(Introspector)深入理解

    Java 内省(Introspector)深入理解 一些概念: 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类 ...

  10. 【小家Spring】聊聊Spring中的数据绑定 --- BeanWrapper以及内省Introspector和PropertyDescriptor

    #### 每篇一句 > 千古以来要饭的没有要早饭的,知道为什么吗? #### 相关阅读 [[小家Spring]聊聊Spring中的数据转换:Converter.ConversionService ...

随机推荐

  1. 解决pyinstaller在单一文件时无法正确添加权限清单问题,(UAC,uac_admin,manifest,asInvoker,python,requireAdministrator)

    做了3天的win10的兼容性测试,大部分时间都卡权限获取这了. 以下废话很多,想直接找解决方法,请跳至红字 首先,简单说下uac,自vista后windows再次加严了权限管理,uac (账户控制) ...

  2. git 设置和取消指定域名代理 - git config proxy

    Firstly - Check Check if U have global .gitconfig file 检查是否有全局 .gitconfig 文件 Usually global .gitconf ...

  3. IoTClient开发5 - ModBusRtu协议

    前言 前面我们介绍了ModBusTcp协议.今天我们接着来介绍ModBusRtu协议.和ModBusTcp不同的是ModBusRtu基于串口通信,ModBusTcp是基于Tcp以太网通信. 所以我们在 ...

  4. 比较typeof与instanceof

    相同点: JavaScript中typeof和instanceof常用来判断一个变量是否为空,或者是什么类型的. 不同点: typeof的定义和用法: 返回值是一个字符串,用来说明变量的数据类型. 细 ...

  5. Python面向对象-@property装饰器

    python中,我们可以直接添加和修改属性的值: >>> class Student(object): ... pass ... >>> s = Student() ...

  6. 松软科技Web课堂:JavaScript Break 和 Continue

    break 语句“跳出”循环. continue 语句“跳过”循环中的一个迭代. Break 语句 在本教程稍早的章节中,您已见到了 break 语句.它被用于“跳出” switch 语句. brea ...

  7. ESLint + Prettier + husky + lint-staged 规范统一前端代码风格

    写在前面: ESLint: Find and fix problems in your JavaScript code. Prettier: Prettier is an opinionated co ...

  8. WinCC的电子签名与审计追踪

    如何写入审计追踪记录 用脚本向Audit中添加记录有两种方法,一种方法是用InserAuditEntryNew函数写入,另一种方法是生成属于“操作员输入消息”类型的报警消息,该报警消息会记录到Audi ...

  9. ubuntu下安装截图工具

    安装shutter 1.添加安装包软件源 sudo add-apt-repository ppa:shutter/ppa 2.更新软件源并且安装 sudo apt-get update sudo ap ...

  10. SpringAOP中切入点的高级使用

    上一篇 SpringAOP之使用切入点创建通知 SpringAOP中切点的高级使用 一.使用控制流切入点(ControlFlowPointcut) 什么是控制流切入点呢?看下面的代码(为了方便,就写进 ...