Commons BeanUtils工具包
简介:
BeanUtils工具包是由Apache公司所开发,提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。
我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。
如果我们使用BeanUtils工具包就可以很方便的对JavaBean类能够进行简便的操作。
使用与依赖包:commons-beanutils-1.9.3.jar ;commons-logging-1.2.jar
BeanUtils工具对JavaBean类的操作:
① BeanUtils 可以便于对javaBean的属性进行赋值。
② BeanUtils 可以便于对javaBean的对象进行赋值。
③ BeanUtils 可以将一个MAP集合的数据拷贝到一个javabean对象中。
BeanUtils常用方法:
| 方法名 | 返回值 | 说明 |
| copyProperties(Object dest,Object orig) | void | 把orig中的值copy到dest中 |
| describe(Object bean) | Map | 把Bean的属性值放入一个Map里面 |
| populate(Object bean,Map properties) | void | 把properties里面的值放如bean中 |
| setProperty(Object bean,String name,Object value) | void | 设置bean对象的名称为name的property的值为value |
| getProperty(Object bean,String name) | String | 取得bean对象中名为name的属性的值 |
BeanUtils的使用:
约定前提:参数名称必须要和JavaBean的属性名称保持一致。
public class User {
private int id;
private String username;
private String email;
private String password;
private String name;
private String phone;
private String address;
public User() {
super();
}
public User(String username, String email, String password, String name, String phone, String address) {
super();
this.username = username;
this.email = email;
this.password = password;
this.name = name;
this.phone = phone;
this.address = address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", email=" + email + ", password=" + password + ", name="
+ name + ", phone=" + phone + ", address=" + address + "]";
}
}
JavaBean Code
例如:用户注册,服务器端获取浏览器端提交的注册表单数据,然后将用户输入的注册信息持久化到数据库中。
浏览器端:表单中<input type="text" name="username">的name属性必须与JavaBean类的属性名一致。
<form action="${pageContext.request.contextPath }/user_register"
method="post">
<div class="register-top-grid">
<h3>注册新用户</h3>
<div class="input">
<span>用户名 <label style="color: red;">*</label></span>
<input type="text" name="username" placeholder="请输入用户名" required="required">
</div>
<div class="input">
<span>邮箱 <label style="color: red;">*</label></span>
<input type="text" name="email" placeholder="请输入邮箱" required="required">
</div>
<div class="input">
<span>密码 <label style="color: red;">*</label></span>
<input type="text" name="password" placeholder="请输入密码" required="required">
</div>
<div class="input">
<span>收货人<label></label></span>
<input type="text" name="name" placeholder="请输入收货">
</div>
<div class="input">
<span>收货电话<label></label></span>
<input type="text" name="phone" placeholder="请输入收货电话">
</div>
<div class="input">
<span>收货地址<label></label></span>
<input type="text" name="address" placeholder="请输入收货地址">
</div>
<div class="clearfix"></div>
</div>
<div class="register-but text-center">
<input type="submit" value="提交">
<div class="clearfix"></div>
</div>
</form>
HTML Code
服务器端:在不使用BeanUtils的情况下获取数据,每一条数据都进行获取并对每个属性逐个赋值;
通过这样的方法如果表单属性字段很多,达到了100、1000甚至更多,那我们不是要写100、1000行重复的代码了吗。谁都不愿意这样做。
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { // 构建User对象
User user = new User(); // 获取请求中表单提交的数据
String username = request.getParameter("username");
String email = request.getParameter("email");
String password = request.getParameter("password");
String name = request.getParameter("name");
String phone = request.getParameter("phone");
String address = request.getParameter("address"); // 把获取到的数据赋值到user对象中
user.setUsername(username);
user.setEmail(email);
user.setPassword(password);
user.setName(name);
user.setPhone(phone);
user.setAddress(address); // 将user对象持久化到数据库中
uService.register(username);
request.setAttribute("msg", "注册成功,请登录");
request.getRequestDispatcher("/user_login.jsp").forward(request, response);
}
而我们使用 BeanUtils.copyProperties() 方法以后,代码量大大的减少,而且整体程序看着也简洁明朗,代码如下:
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { // 构建User对象
User user = new User(); try {
// 获取表单请求中的Map集合,将集合中的数据copy到user对象中;所提交请求中的请求参数和请求参数值的映射关系。
BeanUtils.copyProperties(user, request.getParameterMap());
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} // 将user对象持久化到数据库中
uService.register(user);
request.setAttribute("msg", "注册成功,请登录");
request.getRequestDispatcher("/user_login.jsp").forward(request, response); }
注:如果User和表单之间存在名称不相同的属性,则BeanUtils不对这些属性进行处理。
Commons BeanUtils工具包的更多相关文章
- 内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包、注解、Rentention、Target、注解的基本属性和高级属性
本文转载自:http://blog.sina.com.cn/s/blog_5d65a16901011kom.html 关键字:内省.JavaBean.PropertyDescriptor类.Int ...
- 32_使用BeanUtils工具包操作JavaBean
由于对属性设置值和得到值的需求很多,使用频率很高,所以有一些开源勇士 不满足于JavaBean API 中IntroSpector来操作bean, 写出来了通用的BeanUtils工具,来进一步简 ...
- JavaWeb -- 内省—beanutils工具包 的使用
Apache组织开发了一套用于操作JavaBean的API,这套API考虑到了很多实际开发中的应用场景,因此在实际开发中很多程序员使用这套API操作JavaBean,以简化程序代码的编写. Beanu ...
- java 内省综合案例和Beanutils工具包
演示用eclipse自动生成 ReflectPoint类的setter和getter方法. 直接new一个PropertyDescriptor对象的方式来让大家了解JavaBean API的价值,先用 ...
- Apache Commons BeanUtils
http://commons.apache.org/proper/commons-beanutils/javadocs/v1.9.2/apidocs/org/apache/commons/beanut ...
- myeclipse的项目导入到eclipse下,com.sun.org.apache.commons.beanutils.BeanUtils不能导入
com.sun.org.apache.commons.beanutils.BeanUtils这个包不能引入了怎么办自己下了个org.apache.commons的jar包了之后,改成import or ...
- 关闭log4j 输出 DEBUG org.apache.commons.beanutils.*
2016-03-23 10:52:26,860 DEBUG org.apache.commons.beanutils.MethodUtils - Matching name=getEPort on c ...
- Apache Commons Beanutils对象属性批量复制(pseudo-singleton)
Apache Commons Beanutils为开源软件,可在Apache官网http://commons.apache.org/proper/commons-beanutils/download_ ...
- Commons Beanutils使用setProperty() - 就是爱Java
有时不能只依靠getter/setter操作bean,如:需要名字动态取得的,或是访问bean内的field,甚至是集合或数组内bean的field,利用反射机制对bean的field进行处理,这时候 ...
随机推荐
- Keras+Yolo 目标检测
参考:https://www.cnblogs.com/tensorflownews/p/8922359.html Github:https://github.com/qqwweee/keras-yol ...
- Java笔记 - Socket编程
两个Java应用程序可以通过一个双向的网络通讯连接实现数据交换,这个双向链路的一端称为一个Socket.java.net包中定义的两个类Socket和ServerSocket,分别用来实现双向链路的c ...
- 夏令营501-511NOIP训练18——高三楼
传送门:QAQQAQ 题意:定义矩阵A与矩阵B重复,当且仅当A可以通过任意次行列交换得到B,例如下图A,B即为合法矩阵 现求对于$n*n$的矩阵有多少个不重复的矩阵 数据范围: 对于10%的数据 N≤ ...
- 新增加的html里的标签元素,该元素作为事件,js获取不到id的问题
if(flag==0){ var p = document.createElement("p"); var text ...
- 第二十一篇:spring怎么做缓存
项目背景:你可能遇情景:1.一个做统计的页面,每次刷新需要调接口做查询 ,是联表查询,查出来的数据还需要做一些计算或者加工,不算页面上的图表插件,刷新一次,延迟个几秒钟才出的来2. 一个统计接口如此 ...
- 浅谈web应用的高可用
1.熟悉几个组件 1.1.apache —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安全 ...
- PCA降维2
前言 本文为模式识别系列第一篇,主要介绍主成分分析算法(Principal Component Analysis,PCA)的理论,并附上相关代码.全文主要分六个部分展开: 1)简单示例.通过简单的例子 ...
- Entity Framework Code First 模式-建立一对多联系
一.建立一对多联系 使用的例子为Product与Category,一个种类(Product)对应多个商品(Product) 1.外键列名默认约定 在“一”这边的实体增加一个集合属性(public vi ...
- art-template官方文档
http://aui.github.io/art-template/zh-cn/docs/
- AM运行中的垃圾数据清理
1.下载 filetmpclear.bat 2.打开 这个批处理文件,修改参数 3.按下图 第一个红色框内, 地址: 可以在 AM8服务管理器- 文件服务 ,数据路径后再加 \__Temp__ 第 ...