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

BeanUtils的作用:

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

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

  1. public class Person {
  2. private String name;
  3. private String password;
  4. private Integer age;
  5. private Date birthday;
  6. getter/setter
  7. }

采用beanutils设置属性

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

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

  1. @Test
  2. public void test2() throws Exception {
  3. String name = "zhangsan";
  4. String password = "123";
  5. String age = "34";
  6.  
  7. Person person = new Person();
  8. BeanUtils.setProperty(person, "name", name);
  9. BeanUtils.setProperty(person, "password", password);
  10. BeanUtils.setProperty(person, "age", age);// 自动类型转换,只支持8种基本数据类型
  11.  
  12. System.out.println(person);
  13. }

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

  1. @Test
  2. public void test3() throws Exception {
  3. String name = "zhangsan";
  4. String password = "123";
  5. String age = "34";
  6. String birthday = "1980-09-05";
  7.  
  8. Person person = new Person();
  9. BeanUtils.setProperty(person, "name", name);
  10. BeanUtils.setProperty(person, "password", password);
  11. BeanUtils.setProperty(person, "age", age);// 自动类型转换
  12. BeanUtils.setProperty(person, "birthday", birthday); // 类型转换失败
  13. System.out.println(person);
  14. }

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

改进代码如下:

  1. @Test
  2. public void test4() throws Exception {
  3. String name = "zhangsan";
  4. String password = "123";
  5. String age = "34";
  6. String birthday = "1980-09-05";
  7.  
  8. ConvertUtils.register(new Converter() {
  9. @Override
  10. public Object convert(Class type, Object value) {
  11. if (value == null) {
  12. return null;
  13. }
  14. if (!(value instanceof String)) {
  15. throw new ConversionException("只支持String类型的转换!");
  16. }
  17. String str = (String) value;
  18. if (null == str || "".equals(str.trim())) {
  19. return null;
  20. }
  21. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  22. try {
  23. return format.parse(str);
  24. } catch (ParseException e) {
  25. throw new ConversionException(e);
  26. }
  27. }
  28. }, Date.class);
  29.  
  30. Person person = new Person();
  31. BeanUtils.setProperty(person, "name", name);
  32. BeanUtils.setProperty(person, "password", password);
  33. BeanUtils.setProperty(person, "age", age);// 自动类型转换
  34. BeanUtils.setProperty(person, "birthday", birthday);
  35. System.out.println(person);
  36. }

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

  1. @Test
  2. public void test5() throws Exception {
  3. String name = "zhangsan";
  4. String password = "123";
  5. String age = "34";
  6. String birthday = "1980-09-05";
  7.  
  8. ConvertUtils.register(new DateLocaleConverter(), Date.class);
  9.  
  10. Person person = new Person();
  11. BeanUtils.setProperty(person, "name", name);
  12. BeanUtils.setProperty(person, "password", password);
  13. BeanUtils.setProperty(person, "age", age);// 自动类型转换
  14. BeanUtils.setProperty(person, "birthday", birthday);
  15. System.out.println(person);
  16. }

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

  1. @Test
  2. public void test6() throws Exception {
  3.  
  4. Person person = new Person();
  5.  
  6. ConvertUtils.register(new DateLocaleConverter(), Date.class);
  7.  
  8. Map<String, Object> map = new HashMap<String, Object>();
  9. map.put("name", "aa");
  10. map.put("password", "123");
  11. map.put("age", 23);
  12. map.put("birthday", "1980-09-05");
  13.  
  14. // 用map集合中的值,填充bean的属性,
  15. // 注意:属性名称必须要一致
  16. BeanUtils.populate(person, map);
  17.  
  18. System.out.println(person);
  19. }

内省—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. smarty变量调节器案例

    要求: 如下图,有内容的每一行,当鼠标放上去显示灰色区域,当鼠标离开灰色区域消失

  2. 设置Tomcat根目录

    找到Tomcat安装目录下的:conf\server.xml 在<Host />节点下加入: <Context path="/" docBase="my ...

  3. RDO部署openstack(3)

    目前OpenStackNeutron框架支持的网络服务有:LoadBalancing as a Service,VPNas a Service,Firewallas a Service. 1. 安装和 ...

  4. MSSQL学习笔记

    阅读目录 1.什么是SQL语句 2.使用sql语句创建数据库和表 3.创建数据表 4.数据完整性约束 5.四中基本字符类型说明 6.SQL基本语句 7.类型转换函数 8.日期函数 9.数学函数 10. ...

  5. 【Android】源码external/目录中在编译过程中生成的文件列表

    => external/eyes-free:   accessibilityvalidator.jar (host,share) => external/mesa3d:   libMesa ...

  6. GL_GL系列 - 多币种管理分析(案例)

    2014-07-08 Created By BaoXinjian

  7. CF 15/09/23

    CF580A 给出一个数列,求最长不下降子序列(连续) 直接DP,O(n) CF580B 主人公有n个朋友,每一个朋友有2个属性:m,sat 现在他想邀请部分朋友,邀请的人满足MAX_M-MIN_M& ...

  8. php 共享内存

    共享内存主要用于进程间通信 php中的共享内存有两套扩展可以实现 1.shmop  编译时需要开启 --enable-shmop 参数 实例: $shm_key = ftok(__FILE__, 't ...

  9. Javascript函数声明与函数表达式

    在定义函数时,我们一般使用下面这两种方法: 使用函数声明定义: function sum (a, b) { return a + b; } 使用函数表达式定义: var sum = function ...

  10. 转载__Android-屏幕适配需要注意的地方

    1.尽量使用线性布局(LinearLayout)和相对布局(RelativeLayout),不要使用绝对布局. 2.尽量使用dip和sp,不要使用px. 3.为不同的分辨率提供不同的布局文件和图片. ...