从网上搜了这方面的知识,整理如下
在一般的写bean组件的时候,都必须要写setter和getter方法,当然假如我们事先已经知道bean的相关属性和方法,写bean是比较简单的,但是组件太多的时候,重复编写经常是枯燥乏味令人厌烦的BeanUtils就可以帮助我们来解决这个问题
如果你有两个具有很多相同属性的JavaBean,一个很常见的情况就是Struts里的PO对象(持久对象)和对应的ActionForm,例如Teacher和TeacherForm。我们一般会在Action里从ActionForm构造一个PO对象,传统的方式是使用类似下面的语句对属性逐个赋值:
如果Teacher和TeacherForm间存在名称不相同的属性,则BeanUtils不对这些属性进行处理,需要程序员手动处理。例如Teacher包含modifyDate(该属性记录最后修改日期,不需要用户在界面中输入)属性而TeacherForm无此属性,那么在上面代码的copyProperties()后还要加上一句:
怎么样,很方便吧!除BeanUtils外还有一个名为PropertyUtils的工具类,它也提供copyProperties()方法,作用与BeanUtils的同名方法十分相似,主要的区别在于后者提供类型转换功能,即发现两个JavaBean的同名属性为不同类型时,在支持的数据类型范围内进行转换,而前者不支持这个功能,但是速度会更快一些
BeanUtils可以直接get和set一个属性的值。它将property分成3种类型:
Simple——简单类型,如Stirng、Int……(对于Simple类型,第二个参数直接是属性名即可,详见代码)
Indexed——索引类型,如数组、arrayList……(对于Indexed,则为“属性名[索引值]”,注意这里对于ArrayList和数组都可以用一样的方式进行操作,详见代码)
Maped——这个不用说也该知道,就是指Map,比如HashMap……(对于Map类型,则需要以“属性名(key值)”的形式,详见代码)
访问不同类型的数据可以直接调用函数getProperty和setProperty。它们都只有2个参数,第一个是JavaBean对象,第二个是要操作的属性名。
4.Converter把Request或ResultSet中的字符串绑定到对象的属性
经常要从request,resultSet等对象取出值来赋入bean中,如果不用MVC框架的绑定功能的话,下面的代码谁都写腻了。
String a = request.getParameter("a"); bean.setA(a);
String b = request.getParameter("b");bean.setB(b);
…
不妨写一个Binder自动绑定所有属性:
其中BeanUtils的populate方法(Struts用于将一个map的值填充到一个bean中)或者getProperty,setProperty方法其实都会调用convert进行转换,但Converter只支持一些基本的类型,甚至连java.util.Date类型也不支持。而且它比较笨的一个地方是当遇到不认识的类型时,居然会抛出异常来。对于Date类型,我参考它的sqldate类型实现了一个Converter,而且添加了一个设置日期格式的函数。
要把这个Converter注册,需要如下语句:
//因为要注册converter,所以不能再使用BeanUtils的静态方法了,必须创建BeanUtilsBean实例:
BeanUtils在Struts中的应用:
下面的代码是我们经常在Struts中为了获得浏览器带来的参数的方法:
DynaActionFormdaf=(DynaActionForm)form;
Useruser=newUser();
user.setId(daf.getString("id"));
user.setPassword(daf.getString("password"));
user.setUsername(daf.getString("password"));
…
是不是觉得每次写这些都是在重复造轮子呢?
在看看用BeanUtils写的:
J
BeanUtils.copyProperties(user,daf);
就是这么简单
其余的功能大家继续挖掘吧,可以参考官方API的说明J
BeanUtils支持的转换类型如下:
- java.lang.BigDecimal
- java.lang.BigInteger
- boolean and java.lang.Boolean
- byte and java.lang.Byte
- char and java.lang.Character
- java.lang.Class
- double and java.lang.Double
- float and java.lang.Float
- int and java.lang.Integer
- long and java.lang.Long
- short and java.lang.Short
- java.lang.String
- java.sql.Date
- java.sql.Time
- java.sql.Timestamp
这里要注意一点,java.util.Date是不被支持的,而它的子类java.sql.Date是被支持的。因此如果对象包含时间类型的属性,且希望被转换的时候,一定要使用java.sql.Date类型。否则在转换时会提示argument mistype异常。
分享到:
相关推荐
commons-beanutils-bean-collections-1.7.0.jar
commons-beanutils-bean-collections.jar commons-beanutils-bean-collections.jar
commons-beanutils-bean-collections-1.8.0.jar
commons-beanutils-bean-collections-1.8.3.jar
commons-beanutils-1.8.0 jar包: 1.commons-beanutils-1.8.0.jar 2.commons-beanutils-1.8.0-javadoc.jar ...4.commons-beanutils-bean-collections-1.8.0.jar 5.commons-beanutils-core-1.8.0.jar
BeanUtils进行bean转换
在开始JSP上传文件之前你要准备以下几个东西: 1. commons-FileUpload 1.2 包 ... 2. commons-IO 1.3.1 包 ...3. Commons-BeanUtils 1.7 包 下载地址:http://jakarta.apache.org/commons/beanutils/
常用jar包下载,包括commons-beanutils-1.9.3、commons-collections-3.2.2、commons-collections4-4.1
由于BeanUtils(Spring或Apache Commons)的copyProperties实现是利用反射实现的,它在大量调用时具有比较严重的性能问题。 BeanMapper通过javassist类库实现在运行时直接生成字节码来转换类,在首次生成后,后续...
commons.beanutils封装bean所需要的包,1.93版本,还包含log包,解决低版本再不同JDK版本情况下所造成的乱七八糟问题
beanutils 有两个 包 一个日志包一个bean包
beanutils bean工具类 操作javabean 不费事 省的写反射
Commons-beanutil中包含大量和JavaBean操作有关的工具方法,使用beanutils可轻松利用Java反射机制来完成所需功能,而不需要详细研究反射的原理和使用,同时beanutils类库中提出了动态Bean的概念,可在运行时动态对...
commons-beanutils-bean-collections.jar commons-beanutils-core.jar commons-dbcp.jar commons-fileupload-1.0.jar commons-logging-1.1.1.jar commons-pool-1.3.jar 如果需要别的jar包 去 ...
JAVA 开发 工具包BeanUtils , 用于对Bean进行操作处理的工具类
BeanUtils 是 Apache commons组件的成员之一,主要用于简化JavaBean封装数据的操作。它可以给JavaBean封装一个字符串数据,也可以将一个表单提交的所有数据封装到JavaBean中。使用第三方工具,需要导入jar包:
赠送jar包:commons-beanutils-1.9.4.jar; 赠送原API文档:commons-beanutils-1.9.4-javadoc.jar; 赠送源代码:commons-beanutils-1.9.4-sources.jar; 赠送Maven依赖信息文件:commons-beanutils-1.9.4.pom; ...
BeanUtils工具是一种方便我们对JavaBean进行操作的工具,是Apache组织下的产品。beanUtils 可以便于对javaBean的属性、对象进行赋值,beanUtils可以将一个MAP集合的数据拷贝到一个javabean对象中。