javabean的内省(Introspector)
内省是 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)的更多相关文章
- JavaBeans与内省(Introspector)
JavaBean与Introspector 反射和内省操作很多时候都是在以后要做框架的时候作用非常大. 现在你学的是面向对象编程,即:你所写代码都能够找到对应的类或接口,找到具体的方法写出对应的 ...
- 内省(introspector)------>JavaBean
内省(introspector)------>JavaBean 1.问什么要学内省? 开发框架时,经常需要Java对象的属性来来封装程序的数据,每次使用反射技术完成此操作过于 ...
- 内省(Introspector)
内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法 目的:主要用于传递数据信息,这种类中的方法主要用于访问私有的字段(且方法名符合某种命名规则) p ...
- JavaBean和内省
JavaBean和内省 JavaBean是一个遵循特定的写法的java类 1. 必须有一个无参的构造方法 2.属性私有化 3.私有你给的属性必须通过public类型的方法暴露给 ...
- 深入理解Java:内省(Introspector)
深入理解Java:内省(Introspector) 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传 ...
- Java:内省(Introspector)
内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且 ...
- JAVAWEB开发之Session的追踪创建和销毁、JSP具体解释(指令,标签,内置对象,动作即转发和包括)、JavaBean及内省技术以及EL表达式获取内容的使用
Session的追踪技术 已知Session是利用cookie机制的server端技术.当client第一次訪问资源时 假设调用request.getSession() 就会在server端创建一个由 ...
- JAVA中反射机制五(JavaBean的内省与BeanUtils库)
内省(Introspector) 是Java 语言对JavaBean类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法 ...
- Java 内省(Introspector)深入理解
Java 内省(Introspector)深入理解 一些概念: 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类 ...
- 【小家Spring】聊聊Spring中的数据绑定 --- BeanWrapper以及内省Introspector和PropertyDescriptor
#### 每篇一句 > 千古以来要饭的没有要早饭的,知道为什么吗? #### 相关阅读 [[小家Spring]聊聊Spring中的数据转换:Converter.ConversionService ...
随机推荐
- latex常用技巧
画表格 \usepackage{multirow} \begin{tabular}{cccc} \hline \multicolumn{4}{c}{学生信息}\\ \hline 班级& 姓名& ...
- 可扩展的Java线程池执行器
分享一下最近优锐课学习笔记. Java线程池执行程序偏向于排队而不是产生新线程.从好的方面来说,我们有两种解决方法. 理想情况下,对任何线程池执行程序而言,期望如下: 预先创建了一组初始线程(核心线程 ...
- 从RTL视图到Verilog语言-转可乐豆原创
从RTL视图到Verilog语言 曾经听过某位大牛都说:“当你的学习FPGA到一个境界的时候,你看到的硬件描述语言,将不再是单纯的语言,而是由一个个逻辑门组成的电路图,一旦达到这个境界,方能把代码写到 ...
- SQLHelper.cs类 微软C#版
using System; using System.Data; using System.Xml; using System.Data.SqlClient; using System.Collect ...
- 如何将hive表中的数据导出
近期经常将现场的数据带回公司测试,所以写下该文章,梳理一下思路. 1.首先要查询相应的hive表,比如我要将c_cons这张表导出,我先查出hive中是否有这张表. 查出数据,证明该表在hive中存在 ...
- 《Dotnet9》建站-建站20天感悟
时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...
- JPA中实现双向一对多的关联关系
场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...
- 弹性盒子中的order
order order 属性 设置或检索弹性盒模型对象的子元素出现的順序.. 注意:如果元素不是弹性盒对象的元素,则 order 属性不起作用. <!DOCTYPE html> <h ...
- 带你了解Android Jetpack
1.Jetpack主要特性有以下三点: 1.加速开发组件可单独使用,也可以协同工作,当使用kotlin语言特性时,可以提高效率. 2.消除样板代码Android Jetpack可管理繁琐的Activi ...
- oracle数据库执行sql文件
使用oracle客户端连接数据库,从oracle官网下载客户端instantclient_18_3工具,到目录下打开cmd命令窗口: 个人网盘客户端工具:https://pan.baidu.com/s ...