一:内省是一种特殊的反射,来更方便的操作javaBean对象,通过内省可以获取到类字节码的描述器,

然后解剖每一个字段,获取每个字段的读写方法,即get/set方法的反射,然后获取或者是封装bean的value

下面是通过内省向Bean中set值得示例:

public static <T> T toBean(T t){
Class<?> clazz = t.getClass();
try {
//根据Class对象获取该类的BeanInfo信息
BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
//根据BeanInfo获取该类中每一个字段的描述器
PropertyDescriptor[] props = beanInfo.getPropertyDescriptors();
//遍历描述器,获取每个字段的名称以及写方法(set方法),然后将value值set入bean中
for(PropertyDescriptor property:props){
String field = property.getName();
if(EXCLUDE_FIELD.equals(field)){
continue;
}
Method method = property.getWriteMethod();
method.invoke(t,getCode(field));
}
} catch (Exception e) {
e.printStackTrace();
}
return t;
}

整个测试案例如下:

 /**
*
*/
package com.hlcui.test; import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map; import com.hlcui.entity.Person; /**
* @author Administrator
*
*/
public class TestCase { public static Map<String,Object> codeMap = new HashMap<String,Object>(); private static final String EXCLUDE_FIELD = "class"; //静态代码块加载静态资源
static{
codeMap.put("id",1);
codeMap.put("name", "jack");
codeMap.put("salary",14000);
} public static void main(String[] args){
Person person = toBean(new Person());
System.out.println(person);
} public static <T> T toBean(T t){
Class<?> clazz = t.getClass();
try {
//根据Class对象获取该类的BeanInfo信息
BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
//根据BeanInfo获取该类中每一个字段的描述器
PropertyDescriptor[] props = beanInfo.getPropertyDescriptors();
//遍历描述器,获取每个字段的名称以及写方法(set方法),然后将value值set入bean中
for(PropertyDescriptor property:props){
String field = property.getName();
if(EXCLUDE_FIELD.equals(field)){
continue;
}
Method method = property.getWriteMethod();
method.invoke(t,getCode(field));
}
} catch (Exception e) {
e.printStackTrace();
}
return t;
} public static Object getCode(String field){
return codeMap.get(field);
}
}

内省Introspector(反射操作javaBean)的更多相关文章

  1. [新手学Java]使用内省(Introspector)操作JavaBean属性

    获取类bean中的所有属性: @Test //获取类bean中的所有属性 public void test1() throws Exception{ BeanInfo info = Introspec ...

  2. JavaBeans与内省(Introspector)

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

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

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

  4. 内省(Introspector)

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

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

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

  6. Java:内省(Introspector)

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

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

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

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

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

  9. Java 内省(Introspector)和 BeanUtils

    人生若只如初见,何事秋风悲画扇. 概述 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息, ...

随机推荐

  1. Map 与 JavaBean 的相互装换

    目的 为了方便使用 DbUtils,在插入数据时需要传入含有占位符的 SQL 语句和对应占位符的值(数组),封装代码如下: /** * 插入实体 */ public static <T> ...

  2. TCP粘包, UDP丢包, nagle算法

    一.TCP粘包 1. 什么时候考虑粘包 如果利用tcp每次发送数据,就与对方建立连接,然后双方发送完一段数据后,就关闭连接,这样就不会出现粘包问题(因为只有一种包结构,类似于http协议,UDP不会出 ...

  3. JVM相关命题的博客整理及总结

    JVM垃圾回收基础介绍 http://www.jianshu.com/p/57457a351b8a 减少JVM中逃逸对象的使用 http://www.importnew.com/23150.html ...

  4. 【jquery】jquery 自定义滚动条

    可以自由的给滚动条定义背景,上下按钮,当然不仅仅是颜色,连图片当背景也可以.支持鼠标滚轮,点击滚动条滚轴定位,上下按钮久按加速,兼容 ie,firefox,chrome. 调用方法: $(" ...

  5. SpringBoot2 时间类型自动格式化 自动转换

    package com.archibladwitwicke.springboot2.chapter03.configurer; import com.archibladwitwicke.springb ...

  6. window10删除导航栏中的onedrive

    前面介绍了如何删除导航栏中的“快速访问”,对于一个根本用不着的“oneDrive”肯定也得搞掉. 0.处理前: 1.卸载onedrive是不能清除导航栏里面的onedrive的,进入注册表regedi ...

  7. 升级R语言

    Linux (RedHat, CentOS)上升级R语言: sudo yum install R Windows上升级R语言: install.packages("installr" ...

  8. Java ArrayList源码剖析

    转自: Java ArrayList源码剖析 总体介绍 ArrayList实现了List接口,是顺序容器,即元素存放的数据与放进去的顺序相同,允许放入null元素,底层通过数组实现.除该类未实现同步外 ...

  9. FPGA中的时序分析(三)

    验证公式正确性   前两篇博客提及了关于时序的建立余量和保持余量的计算.结合实际情况,验证公式的运算正确性.结合之前博客提及的LED实验,看一下建立余量和保持余量是否都合格. 建立余量 图1是最大时钟 ...

  10. 如何能够通过代码来重启Android手机?

    String cmd = "su -c reboot";//让手机从启 try { Runtime.getRuntime().exec(cmd); } catch (IOExcep ...