BeanUtils工具常用工具类有两个:BeanUtils、ConvertUtils。BeanUtils用于封装数据,ConvertUtils用于处理类型转换
常用方法:
setProperty(Object obj,String name,Object value) | 设置属性值,如果指定属性不存在,不抛异常 |
---|---|
getProperty(Object obj,String name) | 获得属性值,如果指定属性不存在,抛方法找不到异常 |
package day1.test.test1;
import org.apache.commons.beanutils.BeanUtils;
import org.junit.Test;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
/**
* @author 黄锐
* @create 2020-12-22 18:53
*实际开发中,需要封装到JavaBean中的数据存放在配置文件
*内容:uid=u001 、userName=jack
*javaBean中两个概念:字段Field、属性Property
*字段:就是成员变量。
*例如:private String userName;
*字段名称:userName
*属性:通过getter或setter方法推敲获得
*获得方式:省略set或get前缀,首字母小写
*例如:getUserName -->UserName -->userName
*注意:一般情况下,字段名称和属性名称一致的。
*特殊情况
*private String description; //字段名:description
*public String getDesc(){ //属性名:desc
*return description;
* }
*1、BeanUtils工具类,提供setProperty给指定属性设置内容和getProperty获得指定属性的值
*/
public class BeanUtilsDemoTest {
@Test
public void test() throws InvocationTargetException, IllegalAccessException, NoSuchMethodException {
//1、BeanUtils工具类,提供setProperty给指定属性设置内容和getProperty获得指定属性的值
User user = new User();
System.out.println("封装前:" + user);
//封装数据来自配置文件,底层其实user.setUid("u002")
BeanUtils.setProperty(user,"uid","u002");
BeanUtils.setProperty(user,"userName","hhhh");
System.out.println("封装后:" + user);
//2.获得属性值
String userName = BeanUtils.getProperty(user, "userName");
System.out.println(userName);
}
@Test
public void test1() throws InvocationTargetException, IllegalAccessException {
//1.模拟数据,创建一个Map,填充需要的数据
HashMap<String, String[]> map = new HashMap<>();
map.put("uid", new String[]{"u001"});
map.put("userName", new String[]{"jack","rose"});
map.put("password", new String[]{"1234"});
//2.将使用populate进行填充
User user = new User();
BeanUtils.populate(user,map);
System.out.println(user);
}
@Test
public void test2() throws InvocationTargetException, IllegalAccessException {
//1.模拟数据,创建一个map,填充需要的数据
Map<String, String[]> map = new HashMap<String, String[]>();
map.put("uid",new String[]{"u001"});
map.put("userName",new String[]{"jack","rose"});
map.put("password",new String[]{"1234"});
map.put("hobbies",new String[]{"敲代码","早上敲代码","晚上敲代码"});
map.put("age",new String[]{"123"});
//2.使用populate进行填充
//可以指向属性,填充一组数据,需要类型必须是[]
//如果属性不是数组,将使用map.value表示数组中的第一个。
//BeanUtiles支持类型:基本类型和基本类型对应的包装类,自动将字符串转换为基本类型
User user = new User();
BeanUtils.populate(user,map);
System.out.println(user);
}
}
javaBean
JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制(反射机制)发现和操作这些JavaBean 的属性。
populated:一般来说,这个方法是在org.apache.commons.beanutils.BeanUtils包中的方法。
该方法的函数原型为:BeanUtils.populate( Object bean, Map properties )。这个方法会遍历map