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进行处理,这时候 ...
随机推荐
- iOS开发Drag and Drop简介
1.Drag and Drop简介 Drag and Drop是iOS11的新特性,可以将文本.图片进行拖拽到不同app中,实现数据的传递.只不过只能在iPad上使用,iPhone上只能app内部拖拽 ...
- 移动端适配(绝对单位、相对单位、CSS像素、物理像素、逻辑像素、设备像素比、PPI、Viewport)
在某公司做了一次分享,主题是‘移动端和pc端开发的区别’.可以说,这总结的原版就是在这样的契机下完成的.因为我只是习惯了移动端就应该那么写(设置viewport等),要是让我给大家分条讲下所以然,还真 ...
- namespace 命名空间
namespace作用:资源隔离 当我们不指定namespace时,默认放在default下 创建namespace kubectl create namespace 资源名称 在生产中,我们建议一个 ...
- Django的日常-AJAX
目录 Django的日常-AJAX AJAX简介 AJAX与JQ的一个实例 AJAX与contentType AJAX传json格式 AJAX传文件 Django的日常-AJAX AJAX简介 首先A ...
- HTML中被废弃的标签<b><u><i><s>
<strong>代替<b>给文字加粗 <ins>代替<u>给文本添加下划线 <em>代替<i>将文本倾斜 <del> ...
- 记录:使用springboot的cors和vue的axios进行跨域
一.编写一个配置类,并且注册CorsFilter: 注意允许跨域的域名不要写错 @Configuration public class ZysuyuanCorsConfiguration { @Bea ...
- 获取m,n之间的随机整数
获取m,n之间的随机整数 代码去下:
- 【BZOJ3944】Sum
题面 Description Input 一共T+1行 第1行为数据组数T(T<=10) 第2~T+1行每行一个非负整数N,代表一组询问 Output 一共T行,每行两个用空格分隔的数ans1, ...
- loj2290 随机二分图
题意:有一个左右各n个点的二分图,对于连边组有一些性质:1号组的一条边,有50%的概率出现.2号组两条边,有50%的概率同时出现,50%的概率同时不出现.3号组两条边,有50%的概率出现第一条,有50 ...
- odoo widgets.js 笔记
// 在OpenERP的Web框架内, // 通过声明一个函数来声明一个JavaScript模块[openerp.ext_picking就是这个JS模块], // 并把这个函数放在全局变量opener ...