将属性从一个Bean复制到另一个Bean并忽略嵌套对象的属性可以通过以下步骤实现:
以下是一个示例代码,演示如何实现属性复制并忽略嵌套对象的属性:
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class BeanUtils {
public static void copyProperties(Object source, Object target) throws Exception {
Class<?> sourceClass = source.getClass();
Class<?> targetClass = target.getClass();
// 获取源Bean和目标Bean的属性列表
Field[] sourceFields = sourceClass.getDeclaredFields();
Field[] targetFields = targetClass.getDeclaredFields();
for (Field sourceField : sourceFields) {
// 判断属性是否为嵌套对象
if (isNestedObject(sourceField.getType())) {
continue;
}
// 获取属性名
String fieldName = sourceField.getName();
// 获取源Bean属性的getter方法
PropertyDescriptor sourcePropertyDescriptor = new PropertyDescriptor(fieldName, sourceClass);
Method sourceGetter = sourcePropertyDescriptor.getReadMethod();
// 获取目标Bean属性的setter方法
PropertyDescriptor targetPropertyDescriptor = new PropertyDescriptor(fieldName, targetClass);
Method targetSetter = targetPropertyDescriptor.getWriteMethod();
// 获取源Bean属性的值
Object value = sourceGetter.invoke(source);
// 将属性值设置到目标Bean的对应属性上
targetSetter.invoke(target, value);
}
}
private static boolean isNestedObject(Class<?> clazz) {
// 判断是否为嵌套对象,这里简单判断是否为Java自带类型
return !clazz.isPrimitive() && !clazz.getName().startsWith("java");
}
}
使用示例:
public class Main {
public static void main(String[] args) throws Exception {
SourceBean source = new SourceBean();
source.setName("John");
source.setAge(25);
source.setAddress(new Address("123 Street", "City"));
TargetBean target = new TargetBean();
BeanUtils.copyProperties(source, target);
System.out.println(target.getName()); // Output: John
System.out.println(target.getAge()); // Output: 25
System.out.println(target.getAddress()); // Output: null
}
}
class SourceBean {
private String name;
private int age;
private Address address;
// getters and setters
}
class TargetBean {
private String name;
private int age;
private Address address;
// getters and setters
}
class Address {
private String street;
private String city;
// getters and setters
}
在上述示例中,copyProperties
方法将源Bean source
的属性复制到目标Bean target
中,并忽略了嵌套对象 Address
的属性。最终,目标Bean target
的属性值为源Bean source
的属性值(忽略了嵌套对象的属性)。
领取专属 10元无门槛券
手把手带您无忧上云