概述

   BeanUtils 是 Apache commons组件的成员之一,主要用于简化JavaBean封装数据的操作。它可以给JavaBean封装一个字符串数据,也可以将一个表单提交的所有数据封装到JavaBean中。

   需要的jar包:

beans java 属性没有提示 java beanutil_自定义工具类


   常用方法:

setProperty(Object obj,String name,Object value): 设置属性值,如果指定属性不存在,不抛异常
getProperty(Object obj,String name): 获得属性值,如果指定属性不存在,抛方法找不到异常
populate(Object bean, Map<String,String[]> properties):将Map数据封装到指定Javabean中,一般用于将表单的所有数据封装到javabean。

使用

import java.util.Arrays;

public class User {	
	private String uid;	
	private String userName;
	private String password;
	private String[] hobbies;		
	private int age;
	
	public User() {
		super();
	}
	
	public String getUid() {
		return uid;
	}
	
	public void setUid(String uid) {
		this.uid = uid;
	}

	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}

	public String[] getHobbies() {
		return hobbies;
	}
	public void setHobbies(String[] hobbies) {
		this.hobbies = hobbies;
	}
	
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	@Override
	public String toString() {
		return "User [uid=" + uid + ", userName=" + userName + ", password=" + password + ", hobbies="
				+ Arrays.toString(hobbies) + ", age=" + age + "]";
	}
}
public static void main(String[] args) throws Exception{
	/* 实际开发中,需要封装到JavaBean中的数据存放在配置文件
	 * 	内容:uid=u001 、userName=jack
	 * 	注意:一般情况下,字段名称和属性名称一致的。
	 */
			
	//setProperty给指定属性设置内容
	User user = new User();	
	//封装数据来自配置文件 , 底层其实user.setUid("u002")
	BeanUtils.setProperty(user, "uid", "u002");
	BeanUtils.setProperty(user, "userName", "rose");	
	System.out.println("封装后:" + user);
	
	//getProperty获得指定属性的值
	String userName = BeanUtils.getProperty(user, "userName");
	System.out.println(userName);
	
	//populate填充
	//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[]{"23"});
			
	//2.将使用populate进行填充
	// 	可以向指定的属性,填充一组数据。需要类型必须是[]
	// 	如果属性不是数组,将使用map.value表示数组中的第一个。
	// 	BeanUtils支持类型:基本类型和基本类型对应的包装类,自动将字符串转换基本类型。
	User user = new User();
	BeanUtils.populate(user, map);	
	
	System.out.println(user);
}

自定义工具类

import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;

/**  
* @ClassName: MyBeanUtils  
* @Description: 自定义的JavaBean工具类    
*/
public class MyBeanUtils {
	/**  
	* @Title: populate  
	* @Description: 自动填充  
	* @param bean
	* @param properties    
	*/
	public static void populate(Object bean, Map<String,String[]> properties){
		try {
			BeanUtils.populate(bean, properties);
		} catch (Exception e) {
			//将编译时异常,转换成运行时,方便调用者(使用者不需要再次处理异常)
			throw new RuntimeException(e);
		}
	}
	/**  
	* @Title: populate  
	* @Description: 自动填充,并返回bean对象 
	* @param beanClass
	* @param properties
	* @return    
	*/
	public static Object populate(Class beanClass, Map<String,String[]> properties){
		try {
			//1 使用反射进行实例化
			Object bean = beanClass.newInstance();
			//2 填充数据
			BeanUtils.populate(bean, properties);
			//3 将填充好JavaBean实例返回
			return bean;
		} catch (Exception e) {
			//将编译时异常,转换成运行时,方便调用者(使用者不需要再次处理异常)
			throw new RuntimeException(e);
		}
	}
	/**  
	* @Title: populate  
	* @Description: 自动填充  
	* @param bean
	* @param properties   
	* 
	*	Class<T>此处的T就是一个变量,在运行时,接收具体类型。例如:User
	*	变量必须先定义在使用
	*	泛型变量的定义方式:修饰符 <变量名> 返回值
	*/
	public static <T> T populate(Class<T> beanClass, Map<String,String[]> properties){
		try {
			//1 使用反射进行实例化
			T bean = beanClass.newInstance();
			//2 填充数据
			BeanUtils.populate(bean, properties);
			//3 将填充好JavaBean实例返回
			return bean;
		} catch (Exception e) {
			//将编译时异常,转换成运行时,方便调用者(使用者不需要再次处理异常)
			throw new RuntimeException(e);
		}
	}
}