一:内省是一种特殊的反射,来更方便的操作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. java泛型中<? super String>和<? extends String> 的区别

    (1)<? super String> is any class which is a superclass of String (including String itself). (I ...

  2. 如何在Linux下Redis安装

    转载出于:http://blog.csdn.net/jiangguilong2000/article/details/8114740 redis作为NoSQL数据库的一种应用,响应速度和命中率上还是比 ...

  3. Hbase 学习(四) hbase客户端设置缓存优化查询

    我们在用hbase的api对hbase进行scan操作的时候,可以设置caching和batch来提交查询效率,那它们之间的关系是啥样的呢,我们又应该如何去设置? 首先是我们的客户端代码. 当cach ...

  4. 【C】——如何生成静态库和动态库

    对于一个编译型语言,编译器工作时总要经过预处理.编译.链接等几个过程.以 C/C++ 为例:预处理器(cpp)将每个 .c/.cpp 文件中 #include 的头文件都合并到 .c/.cpp 文件中 ...

  5. logback.xml配置文件详解

    越是老司机越会对日志重视. 如下配置实现了 1.日志文件使用相对路径输出. 2.从日期与文件大小两个纬度分割. 3.特定包与类的日志输出 ** 当存在多个name相同的logger时,逻辑不是很清楚 ...

  6. qualcomm compile instructions

    qualcomm编译指令 Compile the Entire Android Software source build/envsetup.sh lunch msm8909-userdebug ma ...

  7. linux 日志查询

    tail -n 400 logname | grep "AAA" grep 简单使用 1.把要查询的行写到文本里面去: grep WXCP IC.NotifyIndexServer ...

  8. e620. Activating a Keystroke When Any Component in the Window Has Focus

    Normally, a keystroke registered to a component is activated when the component has the focus. This ...

  9. Spring Boot 8080端口被占用抛出异常

    问题: SpringBoot------8080端口被占用抛出异常 解决: 进到项目下这两个文件,添加“server.port=8888”即可

  10. (实用)Eclipse中使用命令行(运行外部程序)

    备忘 http://www.oschina.net/question/28_46291 另外,在eclipse的console菜单中可以选择“new console view”(新控制台视图),这样就 ...