内省和BeanUtil

什么是内省?

内省(Introspector)是Java语言对JavaBean类属性、事件的处理方法。

Java提供了一套API来访问某个属性的getter/setter方法,这些API存放在java.beans中

主要的类和方法

Introspector类:

主要方法:用于获取BeanInfo 对象

BeanInfo beanInfo = Introspector.getBeanInfo(UserInfo.class);

Beaninfo类

PropertyDescriptor[] pd2 = beanInfo.getPropertyDescriptors();

PropertyDescriptor类:

这个类可以直接new,代表对象的单个属性

PropertyDescriptor pd = new PropertyDescriptor("id", Person.class);

或者通过beaninfo获取属性的列表,然后用for-each遍历

PropertyDescriptor[] pd2 = beanInfo.getPropertyDescriptors();

PropertyDescriptor类表示JavaBean类通过存储器导出一个属性。主要方法:
1. getPropertyType(),获得属性的Class对象;
2. getReadMethod(),获得用于读取属性值的方法;

3. getWriteMethod(),获得用于写入属性值的方法;
4. hashCode(),获取对象的哈希值;
5. setReadMethod(Method readMethod),设置用于读取属性值的方法;
6. setWriteMethod(Method writeMethod),设置用于写入属性值的方法

和反射的区别

 反射可以操作各种类的属性,而内省只是通过反射来操作JavaBean的属性

 内省设置属性值肯定会调用seter方法,反射可以不用

BeanUtil

内省操作非常的繁琐,所以所以Apache开发了一套简单、易用的API来操作Bean的属性——BeanUtils工具包。

常用操作

1.对属性赋值和获取

BeanUtils.setProperty(p, "name", "张三");

BeanUtils.getProperty(p, "name")

2.把一个javaBean的属性拷贝到另一个javaBean对象中

//需求:把s1的属性值拷贝到S2中,注意参数的顺序

BeanUtils.copyProperties(s2, s1);

3.把一个map集合中的数据拷贝到javaBean中

BeanUtils.copyProperties(s, map);

BeanUtils自动将字符串转换为基本类型,但是非基本类型需要自定义类型转换器

PropertyUtils类和BeanUtils不同在于,运行getProperty、setProperty操作时,没有类型转换,使用属性的原有类型或者包装类。由于age属性的数据类型是int,所以方法PropertyUtils.setProperty(userInfo,"age", "8")会爆出数据类型不匹配,无法将值赋给属性。

自定义类型转换器

beanutil有时需要自定义类型转换器,将字符串转入相应的类型如String---》Date

ConvertUtils.register(new Converter(){
@SuppressWarnings("unchecked")
@Override
public <T> T convert(Class<T> type, Object value) {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                String sbirthday = (String) value;
try {
return (T) sdf.parse(sbirthday);
                } catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
          }
         }
    }, java.util.Date.class);

原文地址:https://www.cnblogs.com/xing-chen/p/8809855.html

时间: 2024-10-21 11:13:09

内省和BeanUtil的相关文章

反射,内省,BeanUtil的区别

PS:为了操作反射方便,sun创建了 内省, Apache闲麻烦自己创建了BeanUtils 1.开发框架时,经常需要使用java对象的属性来封装程序的数据,每次都使用反射技术完成此类操作过于麻烦,所以sun公司开发了一套API,专门用于操作java对象的属性. 2.sun公司的内省API过于繁琐,所以Apache组织结合很多实际开发中的应用场景开发了一套简单.易用的API操作Bean的属性--BeanUtils.

JAVA中反射机制五(JavaBean的内省与BeanUtils库)

内省(Introspector) 是Java 语言对JavaBean类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则.如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为“值对象”(Value Object),或“VO”.方法比较少.这些信息储存在类的私有变量中,通过set().get()获得. 例如类UserInfo : package com.peidasoft.in

内省(Introspector)

内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则.如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为"值对象"(Value Object),或"VO".方法比较少.这些信息储存在类的私有变量中,通过set().get()获得. 例如类UserInfo : package

【DAY24】内省,NIO的学习笔记

java.lang.Class java.lang.reflect.Field java.lang.reflect.Method java.lang.reflect.Constructor //static代码块 Class.forName("",boolean , ClassLoader); JVM结构 ---------------- Ru.ntime Data Area 1.Method Area //方法区. 共享 2.Heap //存放对象和数组.共享 //Data acce

深入理解Java:内省(Introspector)

内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则.如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为"值对象"(Value Object),或"VO".方法比较少.这些信息储存在类的私有变量中,通过set().get()获得. 例如类UserInfo : package

Java:内省(Introspector)深入理解

内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法名符合某种命名规则.如果在两个模块之间传递信息,可以将信息封装进JavaBean中,这种对象称为"值对象"(Value Object),或"VO".方法比较少.这些信息储存在类的私有变量中,通过set().get()获得. 例如类UserInfo : package

2-java内省机制(Introspector)

来一个简单的示例吧 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 s

JAVAWEB开发之Session的追踪创建和销毁、JSP详解(指令,标签,内置对象,动作即转发和包含)、JavaBean及内省技术以及EL表达式获取内容的使用

Session的追踪技术 已知Session是利用cookie机制的服务器端技术,当客户端第一次访问资源时 如果调用request.getSession() 就会在服务器端创建一个由浏览器独享的session空间,并分配一个唯一且名称为JSESSIONID的cookie发送到浏览器端,如果浏览器没有禁用cookie的话,当浏览器再次访问项目中的Servlet程序时会将JSESSIONID带着,这时JSESSIONID就像唯一的一把钥匙  开启服务器端对应的session空间,进而获取到sessi

Java内省

大家都知道,Java给我提供了反射机制,使我们可以获取到每一个类的每一个属性和方法,并对此进行操作.但是利用反射来操作对象时过于麻烦,所以sun公司就基于反射机制给大家提供了一个更加简单实用的api,那就是内省(Introspector),而内省这套api将会使我们操作JavaBean的属性更加方便. 1.什么是Javabean? ①类必须是公共的 ②类必须具备无参构造器 2.什么是Javabean的属性? 要理解内省的概念,我们先来理解一下什么叫Javabean的属性,下面我们猜下该Javab