BeanUtils工具由Apache软件基金组织编写,提供给我们使用,主要解决的问题是:把对象的属性数据封装到对象中。
在整个J2EE的编程过程中,我们经常会从各种配置文件中读取相应的数据,需要明白的一点是从配置文件中读取到的数据都是String,但是很显然我们的应用程序中不仅仅有String一种数据类型,比如:基本数据类型(int、double、char、float等),还有自定义数据类型(引用数据类型),
那么我们必须面临的一个问题就是讲字符串类型转换为各种具体的数据类型,该怎么办呢?
有两种方法供我们是使用:
对于上面提到的两种方法,我们分析第一种存在的问题是太过于繁琐,每次都要进行大量的类型转换,Apache软件基金会给我们提供了第二种方法,使用其提供的BeanUtils工具,具体的说只需要知道其中的两个方法就能实现类型的转换,很简单,降低了编程的难度。
很明显,要想使用别人开发的工具必须将其jar包导入到程序中,但是BeanUtils包存对另外一个软件包的依赖,下面将具体的显示jar包的名字,其中的版本号不一定与我使用的相同。
commons-beanutils-1.9.2.jar
commons-logging.jar
请下载最新的版本,并把相应的jar包导入到程序中,具体导入jar包的方法在这里就不做任何的介绍了,这属于最基本的知识,只要你在从事Java EE的项目开发,几乎每天都会遇到各种不同的jar包的导入。
在开始编写具体的代码之前,请将source导入到程序中,否则将不能生成正确的重载函数,只需要使用吧Attach Source,将jar包(使用外部文件的方式导入,不要使用外部文件夹的方式导入)导入即可。
Beanutils工具在使用时几乎只用到以下几个方法,其中一个方法通常情况下都是使用匿名内部类。
自定义数据类型使用BeanUtils工具时,本身必须具备getter和setter方法,因为BeanUtils工具本身也是一种内省的实现方法,所以也是借助于底层的getter和setter方法进行转换的。
想要封装成javabean的对象
package com.jpzhutech.beanutils; import java.util.Date; import javax.xml.crypto.Data; public class Emp { private int id ; private String name; public Emp(int id, String name, double salary, Date date) { super(); this.id = id; this.name = name; this.salary = salary; this.date = date; } private double salary; private Date date; public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public Emp() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } @Override public String toString() { // TODO Auto-generated method stub return "编号:"+this.id+" 姓名:"+this.name+" 工资:"+this.salary+" 生日:"+date; } }
/** * BeanUtils工具的使用 * 功能:BeanUtils主要是用于将对象的属性封装到对象中 * BeanUtils的好处: * BeanUtils设置属性值的时候,如果属性是基本数据类型,那么BeanUtils会自动帮我们进行数据类型的转换,并且 * BeanUtils设置属性的时候也是依赖于底层的getter和setter方法 * * 如果设置的属性值是其他的引用数据类型,此时必须要注册一个类型转换器才能实现自动的转换 * */ package com.jpzhutech.beanutils; import java.lang.reflect.InvocationTargetException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import javax.xml.crypto.Data; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.ConvertUtils; import org.apache.commons.beanutils.Converter; import org.apache.commons.beanutils.locale.converters.DateLocaleConverter; public class TestBeanUtils { public static void main(String[] args) throws IllegalAccessException, InvocationTargetException { //从文件中读取到的数据都是字符串的数据,或者是表单提交的数据获取到的时候也是字符串数据 //在J2EE的编程中,我们会通过配置文件或者直接从文件获取数据的方式得到我们想要的数据 //那么就存在一个问题,当我们需要的是一个int时,读到的数据确是String,那么我们每次是不是都要先判断实际 //需要的是什么数据类型,然后进行一个强制的类型转换呢?回答是不需要,我们借助Apache软件基金会提供的BeanUtils工具 //根本不用管什么样的数据类型,只需要使用BeanUtils的setProperties方法,该方法有三个参数,对三个参数进行设置便会 //实现自动的数据类型转换 /*ConvertUtils.register(new Converter() { //自定义日期类型转换器 @Override public Object convert(Class type, Object value) { //type:目前需要转换的数据类型 value:目前参数的值 //目标:将字符串转换为日期 if(type != Date.class) return null; if (value == null || "".equals(value.toString().trim())) { return null; } SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日"); Date date = null; try { date = dateFormat.parse((String)value); } catch (ParseException e) { throw new RuntimeException(e); } return date; } }, Date.class); //Date.class表示要转换的成引用类型,Date类型不是基本数据类型,所以需要一个转换器进行相应的转换,同样该功能属于BeanUtils */ //使用日起转换器工具类 ConvertUtils.register(new DateLocaleConverter(), Date.class); //不灵活,自己实现最好 String id ="110"; //我们用这个三个String类型的属性代表从配置文件中读取到的数据,实际编程过程中这些数据直接从properties文件中读取 String name = "朱君鹏"; String salary = "1000"; // String birthday = "2015年01月30日"; //如果要使用工具中提供的转换器必须要符合一定的格式,像这种格式就不能实现转换 String birthday = "2015-01-30"; //该格式可以实现使用工具提供的转换器类将字符串正确的转换, Emp p = new Emp(); //读取到数据之后,对该对象的属性进行设置,使用BeanUtils工具可以避免强制类型的转换,但是在Emp类中的每个属性都要有getter和setter方法 //因为BeanUtils工具实际上是对内省的封装,使其更加的好用,所以其底层还是依赖getter和setter方法 BeanUtils.setProperty(p, "id", id); //其中p代表的是要设置的对象 BeanUtils.setProperty(p, "name", name); //中间一个参数代表的是要设置的属性 BeanUtils.setProperty(p, "salary", salary); //第三个参数代表的是第二个属性的值 BeanUtils.setProperty(p, "date", birthday); System.out.println(p); } }
更多关于Java类库BeanUtils使用方法及实例请查看下面的相关链接
本文向大家介绍java BASE64Encoder详细介绍及简单实例,包括了java BASE64Encoder详细介绍及简单实例的使用技巧和注意事项,需要的朋友参考一下 java BASE64Encoder详解 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,在发送电子邮件时,服务器认证的用户名和密码需要用Base64编码,附件也需要用Base64编码。 Base64要
一、介绍 mitmproxy是一组工具,可为HTTP/1,HTTP/2和WebSockets提供交互式的,具有SSL/TLS功能的拦截代理。 二、特征 拦截HTTP和HTTPS请求和响应并即时修改它们; 保存完整的HTTP对话以供以后重播和分析; 重播HTTP对话的客户端; 重播先前记录的服务器的HTTP响应; 反向代理模式将流量转发到指定的服务器; macOS和Linux上的透明代理模式; 使用
本文向大家介绍Java常用类库Apache Commons工具类说明及使用实例详解,包括了Java常用类库Apache Commons工具类说明及使用实例详解的使用技巧和注意事项,需要的朋友参考一下 Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动。下面是我这几年做开发过程中自己用过的工具类做简单介绍。 组件 功能介绍 BeanUtils 提供了对于
本文向大家介绍java Arrays工具类实例详解,包括了java Arrays工具类实例详解的使用技巧和注意事项,需要的朋友参考一下 Arrays工具类属于java中常用的工具类 对指定组的指定范围按数字升序进行排序。排序的范围从索引 fromIndex(包括)一直到索引 toIndex(不包括)。(如果 fromIndex==toIndex,则排序范围为空。) a - 要排序的数组 from
本文向大家介绍Python pass详细介绍及实例代码,包括了Python pass详细介绍及实例代码的使用技巧和注意事项,需要的朋友参考一下 Python pass的用法: 空语句 do nothing 保证格式完整 保证语义完整 以if语句为例,在c或c++/Java中: 对应于Python就要这样写: 1 pass语句在函数中的作用 当你在编写一个程序时,执行语句部分思路还没有完成,这时你可
本文向大家介绍Android Loader详细介绍及实例代码,包括了Android Loader详细介绍及实例代码的使用技巧和注意事项,需要的朋友参考一下 一,Android装载器基本方法 装载器从android3.0开始引进。它使得在activity或fragment中异步加载数据变得简单。装载器具有如下特性: 它们对每个Activity和Fragment都有效。 他们提供了异步加载数据的能力。