大家好,今天小编来为大家解答深入解析Java开发中的BeanUtil工具类应用这个问题,很多人还不知道,现在让我们一起来看看吧!
1.commons-beanutils简介
commons-beanutils是Apache组织下的一个基础开源库。它为Java 反射和内省API 提供了包装器。它依赖于内省。其主要目的是利用反射机制来处理JavaBean的属性。我们知道,一个JavaBean通常包含大量的属性。很多时候,对JavaBean的处理导致积累了大量的get/set代码,增加了代码的长度和阅读代码的难度。现在有了BeanUtils,我们处理JavaBean 的属性就方便多了。
2.BeanUtils的使用
BeanUtils是commons-beanutils包下的一个工具类。如果要在我们的项目中使用这个类,需要导入以下两个jar包:
l commons-beanutils.jar
l commons-logging.jar
让我们练习一下如何使用BeanUtils。案例详情请参考BeanUtils用例详情。点击此处下载案例源码,如下:
(1)创建一个Web应用Example5,将上面提到的两个jar包复制到WEB-INF/lib下;
(2)在应用程序的src目录下新建一个Class类,命名为Person。主要代码如例1-1所示:
示例1-1 Person.java
公共类人{
私有字符串名称;
私有整数年龄;
私人字符串性别;
私有布尔布尔值;
以上四个属性的get/set方法这里不再赘述。
@覆盖
公共字符串toString() {
return "人[姓名="+姓名+",年龄="+年龄+",性别="+性别
+ "]";
}
}
在示例1-1 中,定义了四个成员变量并重写了toString() 方法。
(3)在src目录下新建Class类,命名为Demo,并在该类中定义单元测试方法。主要代码如例1-2所示:
示例1-2 Demo.java
公开课演示{
@测试
公共无效fun1()抛出异常{
String className="cn.itcast.domain.Person";
类clazz=Class.forName(className);
对象bean=clazz.newInstance();
BeanUtils.setProperty(bean, "名字", "张三");
BeanUtils.setProperty(bean, "年龄", "23");
BeanUtils.setProperty(bean, "性别", "男");
BeanUtils.setProperty(bean, "xxx", "XXX");
System.out.println(bean);
}
}
例1-2中,使用反射获取Person类的对象,然后使用BeanUtils类的静态方法setProperty(Object bean, String name, Object value)为Person类的指定属性赋值指定的豆。该方法的第一个参数是javaBean对象,第二个参数是javaBean属性,第三个参数是属性的值。
(4)运行Demo类的单元测试方法fun1(),控制台打印结果如图1-1所示:
图1-1 控制台打印结果
图1-1中,Person信息的打印格式是在Person类的toString()方法中设置的。
(5)使用BeanUtils的getProperty(Object bean, String name)方法获取指定bean的指定属性值,如例1-3所示:
公开课演示{
@测试
公共无效fun1()抛出异常{
String className="cn.itcast.domain.Person";
类clazz=Class.forName(className);
对象bean=clazz.newInstance();
BeanUtils.setProperty(bean, "名字", "张三");
BeanUtils.setProperty(bean, "年龄", "23");
BeanUtils.setProperty(bean, "性别", "男");
BeanUtils.setProperty(bean, "xxx", "XXX");
System.out.println(bean);
字符串年龄=BeanUtils.getProperty(bean, "age");
System.out.println(年龄);
}
}
(6)测试fun1方法,控制台打印结果如图1-2所示:
图1-2 控制台打印结果
以上是通过BeanUtils类的setProperty()和getProperty()方法设置和获取javaBean属性;在开发过程中,可能会有这样的需求:将表单提交的请求参数封装在一个javaBean中。这时候我们要用到BeanUtils 的setProperty() 和getProperty() 方法就会很麻烦;因此,BeanUtils为我们提供了一个静态方法populate(Object bean,Map properties),其中第二个参数是封装请求参数的Map。我们可以通过请求。 getParameterMap()方法获取封装了所有请求参数的Map对象。
我们通过一个例子来了解一下BeanUtils类的populate(Object bean,Map properties)方法,如下所示:
(7) 创建一个javaBean类User,如Example5所示。主要代码如例1-4所示:
示例1-4 User.java
公共类用户{
私有字符串用户名;
私有字符串密码;
这里省略了User类的成员变量的get/set方法。
@覆盖
公共字符串toString() {
return "用户[用户名="+用户名+",密码="+密码+"]";
}
}
(8) 在Demo类中定义另一个单元测试方法fun2。主要代码如例1-5所示:
示例1-5 fun2() 方法
@测试
公共无效fun2()抛出异常{
Mapmap=new HashMap();
map.put("用户名", "zhangSan");
map.put("密码", "123");
用户用户=新用户();
BeanUtils.populate(用户,地图);
System.out.println(用户);
}
在例1-5中,地图中的数据被封装到一个JavaBean中。这里有一个要求:Map中的key值必须与JavaBean中的属性名称一致,否则无法封装。
(9)测试fun2方法,控制台打印结果如图1-3所示:
图1-3 控制台打印结果
现在我们将BeanUtils封装成一个工具类。之前我们也封装过类似的工具类。该工具类提供了获取32位长度的不重复大写字符串的方法,如下所示:
(10) 在Example5中创建一个名为CommonUtils的工具类,并在该类中定义一个方法,将地图中的数据封装成javaBean。主要代码如例1-6所示:
示例1-6 CommonUtils.java
公共类CommonUtils {
/**
* 生成不重复的32位大写字符串
* @返回
*/
公共静态字符串uuid(){
return UUID.randomUUID().toString().replace("-","").toUpperCase();
}
/**
* 将map转换为指定类型的javaBean对象
* @参数映射
* @paramclazz
* @返回
*/
公共staticT toBean(Map map, Classclazz) {
尝试{
/*
* 1.创建指定类型的javabean对象
*/
T bean=clazz.newInstance();
/*
* 2.将数据封装成javabean
*/
BeanUtils.populate(bean, 地图);
/*
* 返回javabean对象
*/
返回豆;
} catch(异常e){
抛出新的运行时异常(e);
}
}
}
在示例1-6中,CommonUtils定义了一个静态泛型方法:toBean(Map map, Classclazz),该方法根据传递的参数确定使用哪个javaBean来封装map中的数据。通过反射获取指定类型的javaBean对象,然后调用BeanUtils类的populate()方法。
(11) 在Demo类中定义另一个单元测试方法fun3。主要代码如例1-7所示:
示例1-7 fun3() 方法
@测试
公共无效fun3(){
Mapmap=new HashMap();
map.put("用户名", "lisi");
map.put("密码", "123");
/*
* 请求.getParameterMap();
*/
用户user=CommonUtils.toBean(map, User.class);
System.out.println(用户);
}
例1-7中,使用CommonUtils类的toBean()方法将map中的数据封装成user,然后返回一个user对象。
(12)运行fun3()方法,控制台打印结果如图1-4所示:
【深入解析Java开发中的BeanUtil工具类应用】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
终于找到一篇介绍 BeanUtil 的文章了,之前一直在找!
有18位网友表示赞同!
BeanUtil 的工具功能看起来真的很强大,感觉学习一下会很实用。
有15位网友表示赞同!
我一直觉得 java 代码写转换属性的时候过于麻烦,BeanUtil 能解决这个问题吗?
有6位网友表示赞同!
看了标题感觉这个工具可以帮我们省很多时间,期待深入了解使用方法!
有17位网友表示赞同!
之前在网上找到过 BeanUtil 的介绍,但没有时间去看。现在刚好想学习 Java 工具类,这篇文章正好合适!
有14位网友表示赞同!
不知道 BeanUtil 对大规模项目的效率提升有多大影响?
有10位网友表示赞同!
我已经开始尝试使用 BeanUtil 进行一些基础的属性转换,感觉还挺好用!
有19位网友表示赞同!
对于初学者来说,BeanUtil 的学习难度怎么样?
有11位网友表示赞同!
这篇文章能涵盖 BeanUtil 的各种常用功能吗?
有18位网友表示赞同!
还有哪些其他的 Java 工具类可以替代 BeanUtil 呢?
有14位网友表示赞同!
我想知道 BeanUtil 适用于怎样的开发场景?比如 Web 开发?Spring 应用?
有7位网友表示赞同!
BeanUtil 的性能怎么样?会不会影响代码运行速度?
有10位网友表示赞同!
这篇文章会详细说明 BeanUtil 的 API 使用方法吗?
有6位网友表示赞同!
看标题感觉可以用 BeanUtil 简化很多 Java 代码,很期待!
有10位网友表示赞同!
之前在项目中遇到过类似的属性转换问题,BeanUtil 能解决吗?
有15位网友表示赞同!
想了解一下 BeanUtil 的具体应用案例,看看它在实践中是如何使用的。
有17位网友表示赞同!
对于不同类型的对象转换,BeanUtil 是否都有对应的方法支持?
有9位网友表示赞同!
文章会提供 BeanUtil 下载和安装的步骤吗?
有14位网友表示赞同!
我想学习更多 Java 工具类,除了 BeanUtil,还有什么推荐?
有16位网友表示赞同!
这篇文章能帮助我快速掌握 BeanUtil 的基本用法吗?
有10位网友表示赞同!