开发中常常遇到两个beans相同字段之间值传递中大量的x.setXXXX(y.getXXX())语句;
字段多了比较繁琐,所以在这里就利用反射机制实现自动赋值。
考虑反射机制的效率问题,字段不多就手动设置更好。
/**
* javaBeans自动将相同字段值赋给给另外一个javaBeans
* @param src
* @param target
* @throws Exception
*/
public static void CopyBeans2Beans(Object src, Object target) throws Exception {
Field[] srcFields = src.getClass().getDeclaredFields();
Method[] methods = target.getClass().getMethods();
for (Field field : srcFields) {
//不检查访问修饰符,如果有私有变量请一定要设置
field.setAccessible(true);
String methodName = "set"+field.getName().substring(0, 1).toUpperCase()+field.getName().substring(1);
for (Method method : methods) {
if(methodName.equals(method.getName()))
method.invoke(target, field.get(src));
}
}
}
另一种实现:
public static void CopyBeans2Beans(Object from, Object to) {
try {
BeanInfo toBI = Introspector.getBeanInfo(to.getClass());
PropertyDescriptor[] toPD = toBI.getPropertyDescriptors();
BeanInfo fromBI = Introspector.getBeanInfo(from.getClass());
PropertyDescriptor[] fromPD = fromBI.getPropertyDescriptors();
HashMap<String, PropertyDescriptor> fromMap = new HashMap<String, PropertyDescriptor>();
for (PropertyDescriptor pd : fromPD)
fromMap.put(pd.getName(), pd);
for (PropertyDescriptor toP : toPD) {
Method setMethod = toP.getWriteMethod();
PropertyDescriptor formP = fromMap.get(toP.getName());
if (formP == null)// 如果from没有此属性的get方法,跳过
continue;
Method getMethod = fromMap.get(toP.getName()).getReadMethod();
if (getMethod != null && setMethod != null) {
Object result = getMethod.invoke(from);
if(result==null)
continue;
if(result.getClass()!= java.lang.String.class)
continue;
setMethod.invoke(to, result);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
分享到:
相关推荐
首先,BeanUtils的核心功能是通过反射机制实现Bean的属性操作。在Java中,Bean通常是指符合JavaBeans规范的对象,具备getter和setter方法,用于封装数据。BeanUtils提供的API使得我们无需直接调用这些方法,而是通过...
2. **动态属性访问(Dynamic Property Access)**:即使没有对应的getter或setter方法,BeanUtils也能通过反射机制访问和修改对象的属性。这使得开发者可以处理那些未公开完整接口的对象。 3. **类型转换(Type ...
6. introspection机制:BeanUtils利用Java的反射API(Reflection API)来动态地获取和设置Bean的属性。反射使得在运行时可以检查类的信息,如方法、字段和构造函数,并能调用它们。 7. 设计模式:BeanUtils源码中...
这些方法通过反射机制自动找到对应的setter或getter方法,并执行相应的操作。 2. **批量属性赋值:** 使用`populate()`方法,可以一次性将Map中的键值对映射到Bean的属性上,极大地提高了数据绑定的效率。 3. **...
此外,它还支持动态属性访问,即使属性不存在,也能尝试通过反射机制来调用。这在处理大量数据对象或者需要进行数据转换时非常有用。 `commons-logging-1.1.1.jar`则是Apache Commons Logging的实现,这是一个日志...
BeanUtils库通过反射机制实现了对这些对象的属性操作,包括读取、设置属性值以及复制对象属性等。 **二、核心功能** 1. **属性访问**:BeanUtils提供了一系列静态方法,如`getProperty()`和`setProperty()`,可以...
BeanUtils库通过反射机制,简化了对JavaBeans属性的操作,使得代码更加简洁且易于维护。 二、主要功能 1. 属性访问:BeanUtils提供了一系列静态方法,如`getProperty()`和`setProperty()`,可以直接通过对象名和...
例如,通过`BeanUtil.setProperty(obj, "propertyName", value)`,我们可以直接对对象的"propertyName"属性赋值,而无需调用`setPropertyName()`方法。 2. **批量属性复制**:BeanUtil还提供了`copyProperties()`...
BeanUtils.jar主要包含了Apache Commons BeanUtils库,这是一个基于Java反射机制的工具库,它提供了对JavaBean属性的便捷访问和操作。通过这个库,开发者可以避免编写大量的getter和setter方法,提高代码的可读性和...
通过JavaBeans API和反射机制,JDK 5.0提供了更强大的内省能力,可以动态获取类的信息,如属性、方法等,便于在运行时操作对象。 10. **静态导入**: 静态导入允许一次性导入某个类的所有静态成员,避免了使用...
- **具有无参构造函数**:这是JavaBean的基本要求之一,确保可以通过反射等机制创建JavaBean实例。 - **使用get/set方法访问其属性**:JavaBean的属性通常遵循JavaBeans规范,即通过get和set方法来访问和修改。 ...
- **语法特性**:Java遵循C++的语法结构,但更加简洁和安全,如自动内存管理(垃圾回收)。 - **数据类型**:包括基本类型(如int、char、boolean)和引用类型(类、接口、数组)。 - **变量与常量**:声明变量前...
- **反射机制**: 使用反射API来操作类、字段、方法等。 - **泛型**: 泛型类、泛型方法、通配符等。 - **Java新特性**: 如Java 8中的Lambda表达式、Stream API等。 通过掌握这些知识点,Java程序员不仅能够应对面试...
- 第二种情况下,`s1+=1`会自动进行类型转换,将结果赋值回`short`类型,因此不会出错。 #### 17. Math.round(11.5)与Math.round(-11.5)的结果 - `Math.round(11.5)`返回`12`,`Math.round(-11.5)`返回`-11`,因为`...
- **运算符**: 包括算术、关系、逻辑、位和赋值运算符。 - **控制流程**: 如if-else语句、switch case、for、while和do-while循环,以及break和continue语句。 **2. 类与对象** - **类**: 是Java中的蓝图,定义...
- **垃圾回收**:自动内存管理,理解GC机制。 - **JVM调优**:使用JVisualVM等工具优化性能。 12. **Spring框架**: - **依赖注入**:IoC容器管理组件间的依赖关系。 - **AOP(面向切面编程)**:处理横切关注...
例如,Java使用垃圾回收机制自动管理内存,避免了C++中的内存泄漏问题。 - **类与对象**:Java是面向对象的语言,一切皆为对象。类是创建对象的模板,对象则是类的实例。 - **封装**:通过访问修饰符控制数据的...
- **MVC(Model-View-Controller)**:JSP在MVC架构中的角色,以及如何配合Servlet和JavaBeans实现。 - **JSP和Servlet容器**:如Tomcat,Jetty等,它们如何解析和执行JSP页面。 4. **JAVA设计模式.chm**:设计...
2.4.6赋值运算符和赋值表达式53 2.4.7表达式的求值顺序55 2.5流程控制语句58 2.5.1三种基本控制结构58 2.5.2表达式语句和空语句59 2.5.3块语句60 2.5.4if~else分支语句61 2.5.5多路分支switch~case语句69 ...