Java BeanUtils使用方法详解

介绍

BeanUtils工具类是方便我们对JavaBean进行操作的工具,在java开发中很实用,比如属性拷贝,简化了操作,提高了开发效率,下面就来详细了解一下吧!!!

BeanUtils对JavaBean的常用操作

1. BeanUtils可以对javaBean的属性进行赋值。

2. BeanUtils可以将一个MAP集合的数据拷贝到一个javabean对象中。

3. BeanUtils可以对javaBean的对象进行赋值。

BeanUtils使用步骤

步骤一:项目中导入commons-beanutils.jar包

步骤二:在项目中就可以使用对javaBean的一些相关操作,比如:

1).给对象赋值:BeanUtils.setProperty(对象,属性名,属性值);

2).把一个javaBean的属性拷贝到另一个javaBean对象中:BeanUtils.copyProperties(源对象,新对象);

...

BeanUtils常用方法

常用方法 描述

copyProperties(Objectdest,Objectorig) 对象拷贝

copyProperty(Objectbean,Stringname,Objectvalue) 指定属性拷贝到指定的对象中

cloneBean(Objectbean) 对象的克隆

populate(Objectbean,Mapproperties) 将map数据拷贝到javabean中(map的key要与javabean的属性名称一致)

setProperty(Objectbean,Stringname,Objectvalue) 设置指定属性的值

案例

1.创建一个学生实体类(Student.java) publicclassStudent{

privateStringname;

privateintage;

privateStringse;

publicStudent(){

}

get和set省略

}

2.测试BeanUtils的常见用法

@Test

publicvoidBeanUtilsTest()throwsEception{

Mapmap=newHashMap();

map.put("name","张三");

map.put("age",12);

map.put("se","男");

//将map数据拷贝到Student中

Studentstu=newStudent();

BeanUtils.populate(stu,map);

//Student[name=张三,age=12,se=男]

System.out.println(stu);

//对象的拷贝

Studentstu1=newStudent();

BeanUtils.copyProperties(stu,stu1);

//Student[name=张三,age=12,se=男]

System.out.println(stu1);

//拷贝指定的属性

Studentstu2=newStudent();

BeanUtils.copyProperty(stu2,"name","李四"); //Student[name=李四,age=0,se=null]

System.out.println(stu2);//设置指定的属性

BeanUtils.setProperty(stu2,"se","女");

//Student[name=李四,age=0,se=女]

System.out.println((stu2);

//克隆对象

Objectobject=BeanUtils.cloneBean(stu2);

//Animal[name=李四,age=0,se=女]

System.out.println(object);

}

注意事项:BeanUtils在进行数据拷贝中,不管数据是否有值,会直接覆盖,这样就会存在有些需求无法满足的情况,不如说当拷贝的值为null时,不允许覆盖,可以进行如下操作:

publicstaticString[]getNullPropertyNames(Objectsource){

finalBeanWrappersrc=newBeanWrapperImpl(source);

java.beans.PropertyDescriptor[]pds=src.getPropertyDescriptors();

SetemptyNames=newHashSet();

for(java.beans.PropertyDescriptorpd:pds){

ObjectsrcValue=src.getPropertyValue(pd.getName());

if(srcValue==null)emptyNames.add(pd.getName());

}

String[]result=newString[emptyNames.size()];

returnemptyNames.toArray(result);

}

BeanUtils.copyProperties(源对象,新对象,getNullPropertyNames(源对象));

合集下载

beanutil.beantomap原理

beanutil.beantomap原理

beanutil.beantomap原理

在Java中,mons.beanutils.BeanUtils类中的BeanUtils.toMap方法用于将JavaBean对象转换为java.util.Map。这个方法的原理主要是通过反射来获取JavaBean的属性和对应的值,然后将这些属性和值存储在一个Map中。

下面是BeanUtils.toMap方法的简单实例:

import mons.beanutils.BeanUtils;

public class BeanToMapExample {

public static void main(String[] args) throws Exception {

// 创建一个示例JavaBean对象

Person person = new Person("John Doe", 25);

// 使用BeanUtils.toMap方法将JavaBean转换为Map

java.util.Map map =

BeanUtils.describe(person);

// 输出转换后的Map

System.out.println(map);

}

} 在这个例子中,Person类是一个简单的JavaBean类,具有两个属性:name和age。BeanUtils.describe方法通过反射获取这个JavaBean的属性和对应的值,然后将其放入一个Map中,其中键是属性名,值是属性对应的值。

需要注意的是,BeanUtils.describe方法返回的Map中的值都是字符串类型,因为在JavaBean中,属性的值可以是任何类型,但Map的键和值都必须是字符串。如果需要在Map中保留原始类型,可以使用其他方式进行转换。

总体而言,BeanUtils.toMap方法的原理是基于反射机制,它通过获取JavaBean的属性和值,将它们存储在一个Map中,方便在不同场景中使用。

beanutil常用的方法

beanutil常用的方法

beanutil常⽤的⽅法

Apache Common BeanUtil是⼀个常⽤的在对象之间复制数据的⼯具类,著名的web开发框架struts就是依赖于它进⾏ActionForm的创建。

BeanUtil最常⽤的类是mons.beanutils.BeanUtils。

BeanUtils最常⽤的⽅法为:

1. public void copyProperties(ng.Object dest, ng.Object orig) 把orig中的值copy到dest中.

2. public java.util.Map describe(ng.Object bean) 把Bean的属性值放⼊到⼀个Map⾥⾯。

3. public void populate(ng.Object bean, java.util.Map properties) 把properties⾥⾯的值放⼊bean中。

4. public void setProperty(ng.Object bean, ng.String name, ng.Object value) 设置Bean对象的名称为name的property的值为value.

5. public String getProperty(ng.Object bean, ng.String name)

取得bean对象中名为name的属性的值。

详细的使⽤⽅法可以参见官⽅⽹站:

Apache Common BeanUtil的常见使⽤场景。

1. 同类之间不同对象要求进⾏数据复制。

User user1 = …;User user2 = …;BeanUtils. copyProperties(user2,user1);

2. 不同类不同对象之间的数据复制。

java开发BeanUtils类解决实体对象间赋值

java开发BeanUtils类解决实体对象间赋值

java开发BeanUtils类解决实体对象间赋值

实体对象之间相互传值,如:VO对象的值赋给Entity对象,是代码中常⽤功能,如果通过get、set相互赋值,则很⿇烦,借助

⼯具类BeanUtils可以轻松地完成操作。

BeanUtils依赖包导⼊

BeanUtils 是 Apache commons组件的成员之⼀,主要⽤于简化JavaBean封装数据的操作。使⽤BeanUtils必须导⼊相应的jar

包,BeanUtils的maven坐标为

commons-beanutils

commons-beanutils

1.9.4

⽰例

将前端传来的学⽣排名信息(StudentVo对象)分别赋给学⽣对象(StudentEntity)和排名对象(RankingEntity),这三个类

代码如下:

@Data

public class StudentVo {

private String sno;

private String sname;

private Integer ranking;

private String schoolTerm;

public String toString(){

return "studentVo对象的值 sno:"+getSno()+" sname:"+getSname()+" ranking:"+getRanking().toString()+" schoolTerm:"+getSchoolTerm();

}

}

@Data

public class StudentEntity {

private String sno;

private String sname;

private Integer sage;

public String toString(){

return "studentEntity对象的值 sno:"+getSno()+" sname:"+getSname()+" sage:"+getSage();

beanutils.populate用法

beanutils.populate用法

1 BeanUtils.populate()是Apache Commons BeanUtils库中的一个方法,用于将一个Map中的属性复制到一个JavaBean对象中。

语法:BeanUtils.populate(Object bean, Map

properties)

参数:

bean: 要复制属性的JavaBean对象

properties: 包含要复制的属性的Map对象

返回值:无

例如:

Map properties = new HashMap<>();

properties.put("name", "John");

properties.put("age", "30");

Person person = new Person();

BeanUtils.populate(person, properties);

System.out.println(person.getName()); //output: John

System.out.println(person.getAge()); //output: 30

这个方法可以用来快速将一个Map中的值复制到一个JavaBean对象中,而不用手动一个属性一个属性的复制。这个方法可能带来了一些安全风险,因为它可能会把Map中的任意属性赋值到JavaBean对象中,如果不小心赋值了不应该赋值的属性可能会导致程序出错。因此,在使用BeanUtils.populate()方法时需要注意安全问题,应该确保Map中只包含需要赋值的属性。

另外还有一点需要注意的是,如果要复制的属性不存在于JavaBean对象中,BeanUtils.populate()方法会抛出一个IllegalAccessException异常,因此需要捕获这个异常并进行相应的处理。

beanutil.copyproperties 枚举类

beanutil.copyproperties 枚举类

beanutil.copyproperties 枚举类

在 Java 中,`BeanUtils.copyProperties` 方法通常用于将一个 JavaBean 的属性值拷贝到另一个 JavaBean 中。然而,`Enum` 类型不是常规的 JavaBean,因此 `BeanUtils.copyProperties`

并不直接支持对枚举类的拷贝。

如果你有一个枚举类,想要拷贝其中的属性到另一个对象,你可以使用其他手段实现。以下是一个使用反射和自定义方法的例子:

假设有一个枚举类 `ColorEnum`:

```java

public enum ColorEnum {

RED("FF0000"),

GREEN("00FF00"),

BLUE("0000FF");

private String hexCode;

ColorEnum(String hexCode) {

this.hexCode = hexCode;

}

public String getHexCode() {

return hexCode;

}

}

```

然后有一个普通的 JavaBean 类 `ColorBean`:

```java

public class ColorBean {

private String hexCode;

public String getHexCode() {

return hexCode;

}

public void setHexCode(String hexCode) {

this.hexCode = hexCode;

}

} ```

你可以创建一个工具类,使用反射实现属性的拷贝:

```java

import ng.reflect.Field;

beanutils.copypropertiesforlist用法

beanutils.copypropertiesforlist用法

beanutils.copypropertiesforlist用法

BeanUtils.copyPropertiesForList使用指南

BeanUtils.copyPropertiesForList是Apache Commons BeanUtils库中的一个方法,用于将一个Java Bean的属性值复制到另一个Java Bean或Java Bean列表中。在本文中,我们将详细介绍BeanUtils.copyPropertiesForList的用法,并提供步骤和示例来帮助读者更好地理解和使用该方法。

第一步:准备工作

在开始使用BeanUtils.copyPropertiesForList之前,我们需要确保项目中已经引入了Apache Commons BeanUtils库。可以通过Maven或手动将所需的依赖项添加到项目构建文件中进行引入。下面是一个Maven项目的示例pom.xml文件,展示了如何引入BeanUtils库:

commons-beanutils

commons-beanutils

1.9.4

同时,我们还需要确保我们有两个Java Bean类:源类(source class)和目标类(target class)。源类是要复制属性值的类,而目标类则是要接收属性值的类。这两个类需要具有相同的属性名称和类型。

第二步:基本使用方法

使用BeanUtils.copyPropertiesForList,我们可以将源类的属性值复制到目标类或目标类列表中。下面是此方法的基本使用方法:

`public static void copyPropertiesForList(List dest, List orig)`

- `dest`:目标类列表,用于接收属性值。

- `orig`:源类列表,从中复制属性值。

请注意,dest和orig可以是相同类型的Java Bean列表,也可以是不同类型的Java Bean列表。

beanutil.copyproperties java 的机制

beanutil.copyproperties java 的机制

BeanUtils.copyProperties()是Apache Commons BeanUtils库中的一个方法,用于将一个Java Bean的属性值复制到另一个Java

Bean中。

该方法的签名如下:

```java

public static void copyProperties(Object destination,

Object source)

```

参数destination是目标对象,source是源对象。该方法会将源对象的属性值复制到目标对象中,属性名和类型必须相同。

BeanUtils.copyProperties()方法的机制如下:

1. 通过反射获取源对象和目标对象的所有属性。

2. 遍历源对象的属性列表。

3. 对于每个属性,获取其名称和值。

4. 判断目标对象是否存在同名属性。

5. 如果目标对象存在同名属性,则将源对象的属性值复制到目标对象中。

6. 如果目标对象不存在同名属性,则忽略该属性。

7. 复制完成后,目标对象的属性值与源对象的属性值相同。

需要注意的是,BeanUtils.copyProperties()方法只会复制两个对象之间的属性值,不会复制对象的引用。如果属性是一个引用类型,只会复制引用的值,而不会复制引用对象的属性值。

此外,BeanUtils.copyProperties()方法还提供了其他一些重载方法,可以根据需要进行属性复制。例如,可以通过指定属性的名称列表来选择要复制的属性,或者可以通过自定义的转换器来进行属性值的转换。

总之,BeanUtils.copyProperties()方法是一个方便的工具,可以快速将一个Java Bean的属性值复制到另一个Java Bean中,减少了手动复制属性的工作量。但需要注意的是,该方法只能复制属性值,不能复制引用对象的属性值。

Java内省机制和BeanUtils实现

Java内省机制和BeanUtils实现

内省(Introspector)

Java 语⾔对 Bean 类属性、事件的⼀种缺省处理⽅法。

例如类 A 中有属性 name, 那我们可以通过 getName,setName 来得到其值或者设置新的值。

通过 getName/setName 来访问 name 属性,这就是默认的规则。

Java 中提供了⼀套 API ⽤来访问某个属性的 getter/setter ⽅法,这些 API 存放于包 java.beans 中。

⼀般的做法

通过类 Introspector 来获取某个对象的 BeanInfo 信息,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor )。

接着通过这个属性描述器就可以获取某个属性对应的 getter/setter ⽅法,最后我们可以使⽤反射机制来调⽤这些⽅法。

简单例⼦:

public class IntrospectorDemo {

String name;

public String getName() {

return name;

}

public void setName(String name) {

= name;

}

public static void main(String[] args) throws Exception {

IntrospectorDemo demo = new IntrospectorDemo();

demo.setName("Winter Lau");

// 如果不想把⽗类的属性也列出来的话,

// 那 getBeanInfo 的第⼆个参数填写⽗类的信息

BeanInfo bi = Introspector.getBeanInfo(demo.getClass(), Object.class);

PropertyDescriptor[] props = bi.getPropertyDescriptors();

java copy实体类字段的方法

java copy实体类字段的方法

Java中复制实体类字段的方法

在Java编程中,有时候我们需要复制一个实体类的字段值到另一个实体类中,这在处理对象拷贝、数据映射等场景中十分常见。本文将介绍几种Java中复制实体类字段的方法。

方法一:使用Getter和Setter方法

这是最基本的复制实体类字段的方法。我们可以通过获取源对象的字段值,然后调用目标对象的Setter方法来设置对应字段的值。

```java

public class Person {

private String name;

private int age;

// 省略构造方法和其他方法

// Getter和Setter方法

public String getName() {

return name;

}

public void setName(String name) {

= name; }

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

// 复制字段的方法

public class FieldCopyUtil {

public static void copyFields(Person source, Person target) {

target.setName(source.getName());

target.setAge(source.getAge());

}

}

```

以上代码中,我们通过`copyFields`方法来实现字段的复制。通过调用源对象的Getter方法获取字段值,然后再调用目标对象的Setter方法设置字段值。 方法二:使用Java反射机制

BeanUtils的使用

设a,b为对象

BeanUtils.copyProperties(a, b);

如果这里的BeanUtils是org.springframework.beans.BeanUtils,a拷贝到b。

如果BeanUtils是mons.beanutils.BeanUtils,b拷贝到a。、

BeanUtils.copyProperties 和populate的实现方法是将源bean(也可以是Map)中的每个element在转换器(Converter)的帮助下,将转换的结果设置到目标

bean对应的属性中。例如在HTTP应用中需要从http request中抽取数据,http

request传递过来的都是String 或是String数组类型的变量而目标类型可能是各种各样的,例如http request会有一个name=visitDate,value='2009-05-13'的参数,而目标bean 的visitDate属性的类型是java.util.Date。

BeanUtils的copyProperties和populate需要在转换器(converter)的配合下实现源和目标对象之间的数据类型的转 换。在BeanUtils.copyProperties的javadoc中说明的(Copy property values from

the origin bean to the destination bean for all cases where the property

names are the same—— 只要属性名相同就可以从源bean中拷贝值到目标bean中)这句话提供到功能就是要通过转换器才能实现的。在BeanUtils的

copyProperties和populate的使用过程中Converter是一个非常重要的概念,它提供了强大的扩展能力。

/****************************************************************/

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档