http://www.cnblogs.com/zhangyi85/archive/2009/04/22/1441341.html

1.什么是BeanUtils

BeanUtils主要提供了对于JavaBean进行各种操作。

2.BeanUtils的作用:

在一般的写bean组件的时候,都必须要写setter和getter方法,当然假如我们事先已经知道bean的相关属性和方法,写bean是比较简单的,但是组件太多的时候,重复编写经常是枯燥乏味令人厌烦的。但当有些时候我么需要调用动态对象的属性的时候,我们应该怎么来设定和获取对象的属性呢?BeanUtils就可以帮助我们来解决这个问题。它需要Jakarta-Commons -Collections包和Jakarta-Commons -logging包的支持。

3. org.apache.commons.beanutils

这个包主要提供用于操作JavaBean的工具类,Jakarta-Common-BeanUtils的主要功能都在这个包里实现。

BeanUtils可以直接get和set一个属性的值。它将property分成3种类型:

1Simple——简单类型,如Stirng、Int……

(对于Simple类型,第二个参数直接是属性名即可,详见代码)

2Indexed——索引类型,如 数组、arrayList……

(对于Indexed,则为“属性名[索引值]”,注意这里对于ArrayList和数组都可以用一样的方式进行操作,详见代码)

3Maped——这个不用说也该知道,就是指Map,比如HashMap……

(对于Map类型,则需要以“属性名(key值)”的形式,详见代码)

访问不同类型的数据可以直接调用函数getProperty和setProperty。它们都只有2个参数,第一个是JavaBean对象,第二个是要操作的属性名。

4.Converter RequestResultSet中的字符串绑定到对象的属性 
   经常要从request,resultSet等对象取出值来赋入bean中,如果不用MVC框架的绑定功能的话,下面的代码谁都写腻了。
String a = request.getParameter("a");   bean.setA(a);

String b = request.getParameter("b");  bean.setB(b);

不妨写一个Binder自动绑定所有属性:

MyBean bean = ;

        HashMap map = new HashMap();

        Enumeration names = request.getParameterNames();

        while (names.hasMoreElements())

        {

          String name = (String) names.nextElement();

          map.put(name, request.getParameterValues(name));

        }

     BeanUtils.populate(bean, map);

  

其中BeanUtils的populate方法(Struts用于将一个map的值填充到一个bean中)或者getProperty,setProperty方法其实都会调用convert进行转换。
     但Converter只支持一些基本的类型,甚至连java.util.Date类型也不支持。而且它比较笨的一个地方是当遇到不认识的类型时,居然会抛出异常来。 对于Date类型,我参考它的sqldate类型实现了一个Converter,而且添加了一个设置日期格式的函数。
要把这个Converter注册,需要如下语句:

//因为要注册converter,所以不能再使用BeanUtils的静态方法了,必须创建BeanUtilsBean实例:

BeanUtilsBean beanUtils =

            new BeanUtilsBean( convertUtils, new PropertyUtilsBean() ) ;

        beanUtils.setProperty( bean, name, value ) ;

  

5.BeanUtils在Struts中的应用:

下面的代码是我们经常在Struts中为了获得浏览器带来的参数的方法:

DynaActionForm daf = (DynaActionForm)form ;

        User user = new User() ;

        user.setId( daf.getString( "id" ) ) ;

        user.setPassword( daf.getString( "password" ) ) ;

        user.setUsername( daf.getString( "password" ) ) ;

  

是不是觉得每次写这些都是在重复造轮子呢?

在看看用BeanUtils写的:

BeanUtils.copyProperties( user, daf ) ;

  

就是这么简单

6.实例

public class Test {

    private String name; 

    private HashMap address = new HashMap(); 

    private String[] otherInfo; 

    private ArrayList product; 

    private ArrayList employee; 

    private HashMap telephone;

省略get/set

}

  

MainClass:

Jakarta-Commons- BeanUtils1.8.jar+JDK1.5

package com.cache.domain ;

import java.util.HashMap ;

import org.apache.commons.beanutils.BeanUtils ;

/**

 * @Author:Tony.Zhang setpsw@gmail.com Apr 22, 2009 1:34:16 PM

 */

public class MainClass {

    /**

     * @param args

     * @throws Exception

     */

    public static void main( String[] args ) throws Exception{

        Test test = new Test();

        test.setName( "zhangyi" );

        // BeanUtils.getProperty( bean, name )

        // 动态取得

        System.out.println(BeanUtils.getProperty( test, "name" ));

        HashMap map = new HashMap();

        map.put( "1", "13880808080" );

        map.put( "2", "13550505050" );

        // BeanUtils.setProperty( bean, name, value )

        BeanUtils.setProperty( test, "telephone", map );

        // 动态取得

        System.out.println(BeanUtils.getProperty( test, "telephone(1)" ));

        /**

         * 直接进行Bean之间的clone 复制后的2个Bean的同一个属性可能拥有同一个对象的ref,

         * 这个在使用时要小心,特别是对于属性为类的情况。

         */

        Test test2 = new Test();

        BeanUtils.copyProperties( test2, test );

        System.out.println(BeanUtils.getProperty( test2, "name" ));

    }

}

  

注:以上实例使用

其余的功能大家继续挖掘吧,可以参考官方API的说明J

ConvertUtilsBean convertUtils = new ConvertUtilsBean();

        DateConverter dateConverter = new DateConverter();

        convertUtils.register(dateConverter,Date.class);

  

Jakarta-Commons- BeanUtils学习笔记:的更多相关文章

  1. BeanUtils学习笔记

    一. 简介 BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行简化操作处理.一个JavaBean通常包含了大量的属性,很多情况下,对JavaB ...

  2. Apache Commons Math3学习笔记(2) - 多项式曲线拟合(转)

    多项式曲线拟合:org.apache.commons.math3.fitting.PolynomialCurveFitter类. 用法示例代码: // ... 创建并初始化输入数据: double[] ...

  3. Digester学习笔记(二)转载

    为便于理解,将笔记的内容结构作了一些调整. 对象栈 对digester技术最普通的应用,是用来动态创建一个由Java对象构成的树结构,各对象的属性以及对象间的关系,基于XML文档的内容来设置(XML文 ...

  4. Digester学习笔记(一)转载

    本博文系转载,作者原文已经无法找到,感谢原作者的辛苦整理 Digester学习笔记(一) 在windows下开发程序,用M$提供的接口处理.ini文件或管理注册表的键值是非常方便的.在java平台上开 ...

  5. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  6. guava 学习笔记 使用瓜娃(guava)的选择和预判断使代码变得简洁

    guava 学习笔记 使用瓜娃(guava)的选择和预判断使代码变得简洁 1,本文翻译自 http://eclipsesource.com/blogs/2012/06/06/cleaner-code- ...

  7. 史上最全的SpringMVC学习笔记

    SpringMVC学习笔记---- 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于Spring ...

  8. springmvc学习笔记--支持文件上传和阿里云OSS API简介

    前言: Web开发中图片上传的功能很常见, 本篇博客来讲述下springmvc如何实现图片上传的功能. 主要讲述依赖包引入, 配置项, 本地存储和云存储方案(阿里云的OSS服务). 铺垫: 文件上传是 ...

  9. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  10. jsp&servlet学习笔记

    1.路径引用问题 一个css.jsp.html.或者javascript文件从从一个工程复制到另一工程,如果引用的时候使用的时相对路径,看似没有错误,但是却一直引用不进来,这时候要使用绝对路径,这样才 ...

随机推荐

  1. Activity的测量(Measure)、布局(Layout)和绘制(Draw)过程分析

    一个Android应用程序窗口里面包含了很多UI元素,这些UI元素是以树形结构来组织的,即它们存在着父子关系,其中,子UI元素位于父UI元素里面,因此,在绘制一个Android应用程序窗口的UI之前, ...

  2. hadoop2.610集群配置(包含HA和Hbase )

    .修改Linux主机名2.修改IP3.修改主机名和IP的映射关系######注意######如果你们公司是租用的服务器或是使用的云主机(如华为用主机.阿里云主机等)/etc/hosts里面要配置的是内 ...

  3. 一个Highcharts的例子

    关键字:Highcharts <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Typ ...

  4. DES原理与实现

    一 DES综述 DES是对称密码的一种,它使用56位秘钥对64位长分组进行加密.DES对每个分组的内容都会进行16轮迭代,每轮的操作相同但是对应不同的子秘钥.所有的子秘钥都是由主密钥推导而来. 64位 ...

  5. NET SqlClient

    NET SqlClient的使用与常见问题 阅读目录 一.简介 二.使用ADO.NET 三.常见问题 回到目录 一.简介 在很多要求性能的项目中,我们都要使用传统的ADO.NET的方式来完成我们日常的 ...

  6. cocos2dx 3.3创建新项目 和 VS2012解决方案加载失败问题

     首先创建新项目,步骤如下: 1.进入cocos2d-x-3.3\tools\cocos2d-console\bin目录,按住shift+鼠标右键 2.输入 cocos new 项目名 –p 包名 – ...

  7. Aircrack-ng官方文档翻译[中英对照]---Aireplay-ng

    Aircrack-ng官方文档翻译---Aireplay-ng[90%] Description[简介] Aireplay-ng is used to inject frames. Aireplay- ...

  8. bzoj 2746: [HEOI2012]旅行问题 AC自动机fail树

    2746: [HEOI2012]旅行问题 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 489  Solved: 174[Submit][Status ...

  9. [原博客] POI系列(2)

    正规.严谨.精妙. -POI bzoj 1098 : [POI2007]办公楼biu 如果把互相有手机号的建边得到一个无向图,那么这个图的补图的连通分量个数就是答案了.因为互相没手机号的必然在同一个连 ...

  10. uvalive 6185

    高斯消元,以前从来没写过,今天的模拟比赛里面,添琦给了我一个模板! 虽然是个裸的,但是因为从来没写过,一个小细节竟然搞了我几个小时: 终于最后在小珺同志的帮助下成功a掉了,太开心了! 存一下,作为模板 ...