来一个简单的示例吧

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 static void main(String[] args) throws Exception { //获取User类的字节码,不要获取直接父类(Object)的属性
BeanInfo beanInfo = Introspector.getBeanInfo(User.class,Object.class); //获取User类里面的所有属性描述器 返回数组
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor pd : pds) {
//属性字段名
String name = pd.getName();
//属性字段类型
Class type = pd.getPropertyType(); System.out.println(name+"="+type);
} //打印结果如下显示
//id=int
//password=class java.lang.String
//userName=class java.lang.String
}
}

获取Getter和Setter方法

package com.my.test;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method; import com.my.bean.User; public class Demo {
/**
* 刘诗华
* 内省机制(Introspector)
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception { //获取User类的字节码,不要获取直接父类(Object)的属性
BeanInfo beanInfo = Introspector.getBeanInfo(User.class,Object.class); //获取User类里面的所有属性描述器 返回数组
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor pd : pds) {
//获取getter方法
Method readMethod = pd.getReadMethod();
//获取setter方法
Method writeMethod = pd.getWriteMethod(); System.out.println(readMethod);
System.out.println(writeMethod);
} //打印结果如下显示
// public int com.my.bean.User.getId()
// public void com.my.bean.User.setId(int)
// public java.lang.String com.my.bean.User.getPassword()
// public void com.my.bean.User.setPassword(java.lang.String)
// public java.lang.String com.my.bean.User.getUserName()
// public void com.my.bean.User.setUserName(java.lang.String)
}
}

通过内省略机制封两个方法

package com.my.javabean;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.util.HashMap;
import java.util.Map; import com.my.bean.User; public class BeanUtil { /***
* Bean对象转换成Map集合
* @param bean
* @return
* @throws Exception
*/
public static Map<String, Object> bean2map(Object bean) throws Exception
{
//创建一个map集合对象
Map<String, Object> map=new HashMap<String, Object>(); BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass(),Object.class);
//获取Bean对象的属性描述器
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
//迭代循环属性描述器
for (PropertyDescriptor pd : pds) {
//获取属性名
String propertyName=pd.getName();
//获取属性值,调用 invoke方法
Object propertyValue = pd.getReadMethod().invoke(bean);
//将内容存放到map集合当中
map.put(propertyName, propertyValue);
}
return map;
} /***
* 将Map集合数据封装到Bean对象当中
* T代表数据类型
* @param beanMap 参数Map
* @param beanType Bean对象字节码
* @return
* @throws Exception
*/
public static <T>T map2bean(Map<String, Object> beanMap,Class<T> beanType) throws Exception
{
//创建Bean对象,用T类型来接收 T是在Class<T> beanType这个参数就会确认实际类型
T obj = beanType.newInstance(); BeanInfo beanInfo = Introspector.getBeanInfo(beanType,Object.class);
//获取Bean对象的属性描述器
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors(); for (PropertyDescriptor pd : pds) {
//获取属性名
String propertyName=pd.getName();
//从Map集合中取出数据,封装到Bean对象当中
pd.getWriteMethod().invoke(obj, beanMap.get(propertyName));
}
return obj;
} public static void main(String[] args) throws Exception { User u=new User(100,"刘诗华","xxx"); Map<String, Object> m = BeanUtil.bean2map(u);
System.out.println(m);
//{id=100, userName=刘诗华, password=xxx} User user = map2bean(m,User.class);
System.out.println(user);
//User(id=100, userName=刘诗华, password=xxx)
}
}

2-java内省机制(Introspector)的更多相关文章

  1. java内省机制Introspector

    访问JavaBean属性的两种方式 1)直接调用bean的setXXX或getXXX方法: 2)通过内省技术访问(java.beans包提供了内省的API),内省技术访问也提供了两种方式: a)通过P ...

  2. Java内省机制

    转自: https://blog.csdn.net/hahalzb/article/details/5972421 1.java内省机制其实通俗的理解为,对自身的进行一个扫描,这个扫描的对象就是我们普 ...

  3. java内省机制及PropertyUtils使用方法

    背景 一般情况下,在Java中你可以通过get方法轻松获取beans中的属性值.但是,当你事先不知道beans的类型或者将要访问或修改的属性名时,该怎么办?Java语言中提供了一些像java.bean ...

  4. Java 内省机制

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

  5. 就改了get,却不让我set?——Java内省机制的神奇行为举止一例

    [相关类库]org.apache.commons.beanutils.BeanUtils,提供对Java反射和自省API的包装,其中底层使用到了Java的内省方法.[内省的一般应用形式]通过类Intr ...

  6. java 内省(Introspector)

    开发框架时,经常需要使用java对象的属性来封装程序的数据,每次都使用反射技术完成此类操作过于麻烦,所以sun公司开发了一套API,专门用于操作java对象的属性. 当然你也可以用反射来操作JavaB ...

  7. Java的内省机制

    我现在的理解就是,Java的内省机制就是针对JavaBean的,可以获取到类的属性名称,以及属性的Getter和Setter方法,应该是在写框架的时候才会用到内省机制,还有一个地方可以用到内省机制,就 ...

  8. 01-Introspector内省机制

    在java领域编程中,内省机制相当的不错,可以省去我们程序员很多的不必要的代码 比如说:在jdbc工具类 我们可以将ResultSet结果集待到 javabean对象中 将http请求报文的数据 转换 ...

  9. 【小家Spring】Spring IoC是如何使用BeanWrapper和Java内省结合起来给Bean属性赋值的

    #### 每篇一句 > 具备了技术深度,遇到问题可以快速定位并从根本上解决.有了技术深度之后,学习其它技术可以更快,再深入其它技术也就不会害怕 #### 相关阅读 [[小家Spring]聊聊Sp ...

随机推荐

  1. Fundamentals of Computer Graphics 中文版(第二版) (Peter Shirley 著)

    1 引言 2 数学知识 3 光栅算法 4 信号处理 5 线性代数 6 矩阵变换 7 观察 8 隐藏面消除 9 表面明暗处理 10 光线追踪 11 纹理映射 12 完整的图形流水线 13 图形学的数据结 ...

  2. mina学习总结

    一.简介: Apache Mina Server 是一个网络通信应用框架,Mina 可以帮助我们快速开发高性能.高扩展性的网络通信应用,Mina 提供了事件驱动.异步(Mina 的异步 IO 默认使用 ...

  3. Docker和Rancher

    Docker打包流程: Dockerfile文件和要打包docker的文件放在同级目录下: 1. docker build -t proj:proj-app:0.0.1 返回tagXXX 2. doc ...

  4. java-plupload上传大文件

    参考链接: https://blog.csdn.net/hjf_1291030386/article/details/74784172 https://www.cnblogs.com/tengyunh ...

  5. EXSI6.5复制文件太慢的解决方法

    听说裸金属服务器性能比在windows中安装VMware workstations要好,就在电脑上安装了一个EXSI6.5. 可是在复制文件时很慢,一个3G的文件复制了两三个小时,还时常担心网络会断, ...

  6. IO流中File文件最常用和直接的用法

    一.File (一)概述 1.File: 1)文件和目录(文件夹)路径名的抽象表示形式 2)注意: 可以表示文件夹与文件,即路径与文件 抽象概念,即路径与文件是否存在不确定   2.构造方法 1)Fi ...

  7. java容器Container和组件Component之GUI

    GUI全称Graphical User Interfaces,意为图形用户户界面,又称为图形用户接口,GUI指的就是采用图形方式显示的计算机操作用户界面,打个比方吧,我们点击QQ图标,就会弹出一个QQ ...

  8. java取余%练习

    package ltb6w1; import java.io.*; public class TestMod { String st; int c; InputStreamReader is=new ...

  9. 黄聪:Windows+PHP7+ImageMagick

    需要Apache下才适用,Nginx没测试过~ Step1 把ImageMagick对应版本下载下来(ps: 我这里下载的是这个版本ImageMagick-6.9.3-7-vc14-x86.zip) ...

  10. win7下python2.6如何安装setuptools和pip

    1. 下载 setuptools-0.6c9.tar.gz 下载地址:http://pypi.python.org/packages/source/s/setuptools/setuptools-0. ...