Apache组织开发了一套用于操作JavaBean的API,这套API考虑到了很多实际开发中的应用场景,因此在实际开发中很多程序员使用这套API操作JavaBean,以简化程序代码的编写。

BeanUtils的作用:

1)支持String到8种基本数据类型的转换;

2)其他引用数据类型都需要注册转换器:ConvertUtils.register(Converter,Class);

public class Person {
private String name;
private String password;
private Integer age;
private Date birthday;
getter/setter
}

采用beanutils设置属性

@Test
public void test1() throws Exception {
Person person = new Person();
BeanUtils.setProperty(person, "name", "zhangsan");
System.out.println(person.getName());
}

采用beanutils拷贝对象的属性(基本类型)

@Test
public void test2() throws Exception {
String name = "zhangsan";
String password = "123";
String age = "34"; Person person = new Person();
BeanUtils.setProperty(person, "name", name);
BeanUtils.setProperty(person, "password", password);
BeanUtils.setProperty(person, "age", age);// 自动类型转换,只支持8种基本数据类型 System.out.println(person);
}

采用beanutils拷贝对象的属性(非基本类型)

@Test
public void test3() throws Exception {
String name = "zhangsan";
String password = "123";
String age = "34";
String birthday = "1980-09-05"; Person person = new Person();
BeanUtils.setProperty(person, "name", name);
BeanUtils.setProperty(person, "password", password);
BeanUtils.setProperty(person, "age", age);// 自动类型转换
BeanUtils.setProperty(person, "birthday", birthday); // 类型转换失败
System.out.println(person);
}

为让Date能够赋值到birthday属性上,我们给beanutils注册一个日期转换器。

改进代码如下:

@Test
public void test4() throws Exception {
String name = "zhangsan";
String password = "123";
String age = "34";
String birthday = "1980-09-05"; ConvertUtils.register(new Converter() {
@Override
public Object convert(Class type, Object value) {
if (value == null) {
return null;
} if (!(value instanceof String)) {
throw new ConversionException("只支持String类型的转换!");
} String str = (String) value;
if (null == str || "".equals(str.trim())) {
return null;
} SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
return format.parse(str);
} catch (ParseException e) {
throw new ConversionException(e);
}
} }, Date.class
); Person person = new Person();
BeanUtils.setProperty(person, "name", name);
BeanUtils.setProperty(person, "password", password);
BeanUtils.setProperty(person, "age", age);// 自动类型转换
BeanUtils.setProperty(person, "birthday", birthday);
System.out.println(person);
}

采用beanutils自带的日期类型转换器

@Test
public void test5() throws Exception {
String name = "zhangsan";
String password = "123";
String age = "34";
String birthday = "1980-09-05"; ConvertUtils.register(new DateLocaleConverter(), Date.class); Person person = new Person();
BeanUtils.setProperty(person, "name", name);
BeanUtils.setProperty(person, "password", password);
BeanUtils.setProperty(person, "age", age);// 自动类型转换
BeanUtils.setProperty(person, "birthday", birthday);
System.out.println(person);
}

收集数据到map中,并通过beanutils拷贝到指定的对象中去

@Test
public void test6() throws Exception { Person person = new Person(); ConvertUtils.register(new DateLocaleConverter(), Date.class); Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "aa");
map.put("password", "123");
map.put("age", 23);
map.put("birthday", "1980-09-05"); // 用map集合中的值,填充bean的属性,
// 注意:属性名称必须要一致
BeanUtils.populate(person, map); System.out.println(person);
}

内省—beanutils工具包的更多相关文章

  1. JavaWeb -- 内省—beanutils工具包 的使用

    Apache组织开发了一套用于操作JavaBean的API,这套API考虑到了很多实际开发中的应用场景,因此在实际开发中很多程序员使用这套API操作JavaBean,以简化程序代码的编写. Beanu ...

  2. 内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包、注解、Rentention、Target、注解的基本属性和高级属性

      本文转载自:http://blog.sina.com.cn/s/blog_5d65a16901011kom.html 关键字:内省.JavaBean.PropertyDescriptor类.Int ...

  3. java 内省综合案例和Beanutils工具包

    演示用eclipse自动生成 ReflectPoint类的setter和getter方法. 直接new一个PropertyDescriptor对象的方式来让大家了解JavaBean API的价值,先用 ...

  4. 32_使用BeanUtils工具包操作JavaBean

      由于对属性设置值和得到值的需求很多,使用频率很高,所以有一些开源勇士 不满足于JavaBean API 中IntroSpector来操作bean, 写出来了通用的BeanUtils工具,来进一步简 ...

  5. Commons BeanUtils工具包

    简介: BeanUtils工具包是由Apache公司所开发,提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理. 我们知道,一个JavaBean通常包含了大 ...

  6. javaweb学习总结五(内省、beanUtils工具包)

    一:内省的概念 1:内省是反射的一种特例,由于在反射中频繁的操作javabean,所以为了方便反射 javabean,sun公司开发出一套API提高效率. 2:javaBean,就是用来封装客户端请求 ...

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

    Session的追踪技术 已知Session是利用cookie机制的server端技术.当client第一次訪问资源时 假设调用request.getSession() 就会在server端创建一个由 ...

  8. javase(14)_java基础增强

    一.Eclipse的使用 1.在eclipse下Java程序的编写和run as,debug as,及java运行环境的配置. 2.快捷键的配置,常用快捷键: •内容提示:Alt + / •快速修复: ...

  9. JavaBean 内省API BeanUtils工具 泛型 xml xml约束

    1 什么是JavaBean?有何特征? 1)符合特定规则的类    2)JavaBean分二类:     a)侠义的JavaBean         .私有的字段(Field)         .对私 ...

随机推荐

  1. matlab 画三维图函数

    matlab三维绘图 http://blog.sina.com.cn/s/blog_6d5ffd0d0100lyah.html Matlab绘图系列之高级绘图 http://blog.163.com/ ...

  2. CentOS6.8安装Redis3.2.5

    1.下载Redis3.2.5安装包           wget http://download.redis.io/releases/redis-3.2.5.tar.gz 2.解压.编译.安装redi ...

  3. php提高效率

    1. foreach效率更高,尽量用foreach代替while和for循环. 2. 循环内部不要声明变量,尤其是对象这样的变量. 3. 在多重嵌套循环中,如有可能,应当将最长的循环放在内层,最短循环 ...

  4. Winform/WPF国际化处理

    1.Winfrom国际化处理方式 ==> Winform中国际化支持可将UI页面和.cs文件分开处理 处理窗体方式如下:1.选择Form窗体设置其--Language(默认中文--Default ...

  5. Redis简介及3.0.2编译安装

    由于项目需要Redis作为内存数据库,所以也开始搞Redis~ Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).l ...

  6. POJ 4046 Sightseeing 枚举+最短路 好题

    有n个节点的m条无向边的图,节点编号为1~n 然后有点权和边权,给出q个询问,每一个询问给出2点u,v 输出u,v的最短距离 这里的最短距离规定为: u到v的路径的所有边权+u到v路径上最大的一个点权 ...

  7. Python中split()函数的用法及实际使用示例

    Python中split()函数,通常用于将字符串切片并转换为列表. 一.函数说明: split():语法:str.split(str="",num=string.count(st ...

  8. JadClipse eclipse反编译插件

    A.下载JadClipse,http://jadclipse.sourceforge.net/wiki/index.php/Main_Page#Download,注意选择与eclipse版本一致的版本 ...

  9. Laravel5.0 CSRFチェックを無効化(修改后可以像5.1以上那样从CSRF保护中排除指定URL)

    Laravel5では全てのPOSTに勝手にCSRFチェックが付いてきます.便利と言えば便利ですが.Laravel外からのPOSTを受け取りたいときなど大迷惑です. CSRFチェックを排除する方法が何故 ...

  10. MemcacheQ 的安装与使用

    1.安装libevent 官网:http://www.libevent.org/ 全选复制放进笔记 $ wget https://github.com/downloads/libevent/libev ...