本帖最后由 小石姐姐 于 2018-4-25 15:51 编辑
BeanUtils介绍及使用
BeanUtils : 来自于Apache(阿帕奇)这个开源组织,有很优秀的开源项目,类库,工具类,框架
之前我们使用的类都是来自Java编写好的源代码
而这个BeanUtils却是一个叫做Apache的组织编写.
那么这个组织编写的代码当中, 有一个系列可以很方便的提高我们今后的开发效率.
这个系列为Commons, BeanUtils就是其中之一
主要功能:
就是为了简化JavaBean封装数据的操作
*
* BeanUtils的使用配置:
* 一. 将commons-beanutils-1.8.3-bin.zip 压缩包解压:
1.导入两个jar包,放到工程目录下
commons-beanutils-1.8.3.jar(核心jar包)
commons-logging-1.1.1.jar (日志,是BeanUtils依赖的另一个jar包,commons里的很多工具包
就依赖于这个包)
2.配置Build Path(构建环境)
选中两个文件-->右击--->Build Path--->add to Build Path
之后会获得一个类库:
将jar包Build path 配置到当前的classpath环境变量中
三个常用方法:
static void setProperty(Object bean, String name, Object value)
static String getProperty(Object bean, String name)
static void populate(Object bean, Map properties)
注意:
BeanUtils的setproperty和getProperty,populate方法底层并不是直接操作成员变量,而是操作和成员变量名有关的get和set方法.
//上边的set和get方法,当类里边没有定义get和set方法时,是不能使用的,setProperty(不会报错,也不赋值)
getProperty(会报错)
setProperty 用来给对象中的属性赋值(了解)
参数1: 需要设置属性的对象
参数2: 需要修改的属性名称
参数3: 需要修改的具体元素
getProperty 用来获取对象中的属性(了解)
参数1: 要获取的javaBean对象
参数2: 对象中的哪个属性
Populate 用来给对象中的属性赋值(掌握)
参数1: 要设置属性的对象
参数2: 将属性以Map集合的形式传入
Key : 属性的名称
Value: 属性具体的值
*/
public class BeanUtils的概述 {
public static void main(String[] args) throws ReflectiveOperationException {
Person p = new Person();
System.out.println(p);
/*Output:
Person [name=null, age=0, gender=null]
*///:Person类创建成功
//static void setProperty(Object bean,string name ,Object value);
//给JavaBean的成员变量赋值
BeanUtils.setProperty(p, "name", "香蕉");
System.out.println(p);
/*Output:
Person [name=香蕉, age=0, gender=null]
*///:name 变量设置成功
//static String getProperty(Object bean,String name);
//获取JavaBean的成员变量值
String name = BeanUtils.getProperty(p, "name");
System.out.println(name);
/*Output:
香蕉
*///:获取的返回值都是String类型的,如果像转换成int型,使用Integer.parseInt(name)方法
Map<String,Object> map = new HashMap<String,Object>();
map.put("name", "橘子");
map.put("age", 22);
map.put("gender","male");
map.put("birthday", "2018.4.20");
BeanUtils.populate(p, map);
System.out.println(p);
/*Output:
Person [name=橘子, age=22, gender=male]
*///:虽然Person类中没有birthday,但是也没有报错,只是没有使用这个值
}
}
------------------------------------------
package com.jobday13;
import java.lang.reflect.Field;
import java.util.Map;
import java.util.Set;
/*
* 自定义Beanutils类:
*
* static void setProperty(Object bean, String name, Object value)
static String getProperty(Object bean, String name)
static void populate(Object bean, Map properties)
*
*
*/
public class 自定义BeanUtils {
// static void setProperty(Object bean, String name, Object value)
public static void setProperty(Object bean, String name, Object value) throws ReflectiveOperationException{
//获取字节码对象
Class clazz = bean.getClass();
//获取对应的字段
Field f = clazz.getDeclaredField("name");
//将对象的指定字段设置为指定值
f.setAccessible(true);
f.set(bean, value);
}
//static String getProperty(Object bean, String name)
public static String getProperty(Object bean, String name) throws ReflectiveOperationException{
//获取字节码对象
Class clazz = bean.getClass();
//获取类的指定字段
Field f = clazz.getDeclaredField("name");
//取消Java的默认访问检查
f.setAccessible(true);
//获取指定自段值
Object value = f.get(bean);
return value.toString();
}
//static void populate(Object bean, Map properties)
static void populate(Object bean, Map map) throws ReflectiveOperationException{
//获取字节码对象
Class clazz = bean.getClass();
//获取所有的字段
//获取Map中所有的key
Set keys = map.keySet();
//遍历keys ,通过key获取指定的字段
for(Object key : keys){
try {
Field f = clazz.getDeclaredField(key.toString());
//通过key 获取 值
Object value = map.get(key);
//取消Java的默认访问检查
f.setAccessible(true);
f.set(bean, value);
} catch (NoSuchFieldException e) {
//此处不进行操作
}
}
}
}
-----------------
package com.jobday13;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
public class 测试类_自定义Beanutils类 {
public static void main(String[] args) throws ReflectiveOperationException{
Person p = new Person();
自定义BeanUtils.setProperty(p, "name", "haha");
System.out.println(p);
Map<String,Object> map = new HashMap<String,Object>();
map.put("name", "橘子");
map.put("age", 22);
map.put("gender","male");
map.put("birthday", "2018.4.20");
自定义BeanUtils.populate(p, map);
System.out.println(p);
/*Output:
Person [name=橘子, age=22, gender=male]
*///:~
}
}
|
|