在日常Java开发中,数据对象的复制与转换是一个常见需求,但手动编写代码容易出错且效率低下。而Apache Commons
提供的BeanUtils工具类,就像一把瑞士军刀,可以轻松应对这些场景!本文将带你全面掌握BeanUtils的用法,附带完整示例,轻松入门!
概括:
- 作用将一个对象转换成另外一个对象
- Apache Commons下的包
BeanUtils是Apache Commons提供的一个工具类库,专注于JavaBean的属性操作。它的核心功能包括:
优点:
在项目的pom.xml中添加以下依赖:
<dependency>
<groupId>commons-beanutilsgroupId>
<artifactId>commons-beanutilsartifactId>
<version>1.9.4version>
dependency>
将一个对象的属性复制到另一个对象,尤其适合DTO与实体类的转换。
示例代码:
import org.apache.commons.beanutils.BeanUtils;
public class BeanUtilsDemo {
public static void main(String[] args) throws Exception {
// 定义源对象
User source = new User();
source.setName("Alice");
source.setAge(25);
// 定义目标对象
UserDTO target = new UserDTO();
// 属性拷贝
BeanUtils.copyProperties(target, source);
// 输出结果
System.out.println("目标对象:" + target);
}
}
// User 类
class User {
private String name;
private int age;
// Getter & Setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
// UserDTO 类
class UserDTO {
private String name;
private int age;
@Override
public String toString() {
return "UserDTO{name='" + name + "', age=" + age + '}';
}
}
BeanUtils可以通过字符串动态设置JavaBean的属性值。
示例代码:
import org.apache.commons.beanutils.BeanUtils;
public class DynamicPropertySetting {
public static void main(String[] args) throws Exception {
User user = new User();
// 动态设置属性
BeanUtils.setProperty(user, "name", "Bob");
BeanUtils.setProperty(user, "age", "30");
System.out.println("动态设置后的对象:" + user);
}
}
BeanUtils 支持将JavaBean 转换为Map,或将Map转换为JavaBean。
示例代码:
import org.apache.commons.beanutils.BeanUtils;
import java.util.HashMap;
import java.util.Map;
public class BeanToMapDemo {
public static void main(String[] args) throws Exception {
User user = new User();
user.setName("Charlie");
user.setAge(28);
// Bean 转 Map
Map<String, String> map = BeanUtils.describe(user);
System.out.println("Bean 转 Map:" + map);
// Map 转 Bean
User newUser = new User();
BeanUtils.populate(newUser, map);
System.out.println("Map 转 Bean:" + newUser);
}
}
BeanUtils的copyProperties 方法只支持浅拷贝,嵌套对象的属性不会被复制。
BeanUtils可以处理嵌套对象的属性复制。如果源对象和目标对象包含嵌套对象,并且这些嵌套对象的属性也需要复制,BeanUtils可以自动处理这种情况。
BeanUtils默认是区分大小写的。如果源对象和目标对象的属性名在大小写上不一致,BeanUtils将不会复制这些属性。可以通过设置BeanUtilsBean的setIgnoreCase方法来忽略大小写。