内省Introspector(反射操作javaBean)
一:内省是一种特殊的反射,来更方便的操作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)的更多相关文章
- [新手学Java]使用内省(Introspector)操作JavaBean属性
获取类bean中的所有属性: @Test //获取类bean中的所有属性 public void test1() throws Exception{ BeanInfo info = Introspec ...
- JavaBeans与内省(Introspector)
JavaBean与Introspector 反射和内省操作很多时候都是在以后要做框架的时候作用非常大. 现在你学的是面向对象编程,即:你所写代码都能够找到对应的类或接口,找到具体的方法写出对应的 ...
- 内省(introspector)------>JavaBean
内省(introspector)------>JavaBean 1.问什么要学内省? 开发框架时,经常需要Java对象的属性来来封装程序的数据,每次使用反射技术完成此操作过于 ...
- 内省(Introspector)
内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法 目的:主要用于传递数据信息,这种类中的方法主要用于访问私有的字段(且方法名符合某种命名规则) p ...
- 深入理解Java:内省(Introspector)
深入理解Java:内省(Introspector) 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传 ...
- Java:内省(Introspector)
内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且 ...
- Java 内省(Introspector)深入理解
Java 内省(Introspector)深入理解 一些概念: 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类 ...
- 【小家Spring】聊聊Spring中的数据绑定 --- BeanWrapper以及内省Introspector和PropertyDescriptor
#### 每篇一句 > 千古以来要饭的没有要早饭的,知道为什么吗? #### 相关阅读 [[小家Spring]聊聊Spring中的数据转换:Converter.ConversionService ...
- Java 内省(Introspector)和 BeanUtils
人生若只如初见,何事秋风悲画扇. 概述 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息, ...
随机推荐
- Unity Shader学习资料
文本教程 http://www.cnblogs.com/polobymulberry/p/4314147.html 视频教程 http://www.sikiedu.com/my/course/37 冯 ...
- 腾讯云安装Hadoop遇到的问题
1.能正常访问bincoding.cn:50030,不能连接到9000端口 Call to bincoding.cn/123.206.212.115:9000 failed on connection ...
- 【oneday_onepage】——Microsoft adds a wing, more closets to the homes of SharePoint Online tenants
To prevent SharePoint Online customers from feeling boxed in, Microsoft wants to improve the way the ...
- es 剩余磁盘空间达到es最小值,添加数据被block
剩余磁盘空间达到es最小值,添加数据被block PUT _all/_settings {"index.blocks.read_only_allow_delete": null} ...
- 【jquery】jquery 实现许愿墙效果,可拖拽
最近整理做过的项目,发现有个许愿墙的效果,今天拿出来给大家分享下. 先简单的介绍下功能点: 随机显示背景图或背景色 出现的位置随机 可以通过拖拽改变位置 好了,附上代码: <!doctype h ...
- php 常用的标签比较
eq或者 equal 等于 neq 或者notequal 不等于 gt 大于 egt 大于等于 lt 小于 elt 小于等于 heq 恒等于 nheq 不恒等于
- jquery操作select取值赋值与设置选中[转]
本节内容:jquery实现select下拉框的取值与赋值,设置选中的方法大全. 比如<select class="selector"></select> 1 ...
- 关于DLNA
Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment:00000099 EndFragment:00005587 概念 DLNA的全称是DIGITAL ...
- Axiom3D:Ogre地形组件代码解析
大致流程. 这里简单介绍下,Axiom中采用的Ogre的地形组件的一些概念与如何生成地形. 先说下大致流程,然后大家再往下看.(只说如何生成地形与LOD,除高度纹理图外别的纹理暂时不管.) 1.生成T ...
- 转换基于Maven的Java项目支持Eclipse IDE
在过去的教程中,使用 Maven 创建了一个Java项目,但是这个项目不能导入到Eclipse IDE中,因为它不是 Eclipse 风格的项目. 这里有一个指南,向您演示如何转换 Maven 生成 ...