Java Beanutils 简明教程

Java BeanUtils - Nested Property Access

Description

您可以通过使用 “.” 分隔符连接访问路径的属性名称来访问 bean 的嵌套属性的值。

您可以使用以下方法获取和设置 Nested 属性的值:

  1. PropertyUtils.getNestedProperty(Object, String)

  2. PropertyUtils.setNestedProperty(Object, String, Object)

参数:

  1. Object : 要获取或修改其属性的 bean。

  2. String : 要获取或修改的嵌套属性的名称。

Example

在本示例中,您将看到如何获取和设置嵌套属性的值。我们将创建三个类: SubBean,用于 Bean 的 AppLayer1Bean 以及 BeanUtilsDemo 作为要运行的主程序。

import org.apache.commons.beanutils.PropertyUtils;

public class BeanUtilsDemo {
    public static void main(String args[]){
        try{
            // create the bean
            AppLayer1Bean nested = new AppLayer1Bean();
            // set a SubBean which is part of another bean
            SubBean sb = new SubBean();
            sb.setStringProperty("Hello World from SubBean");
            nested.setSubBean(sb);

            // accessing and setting nested properties
            PropertyUtils.setNestedProperty(
                nested, "subBean.stringProperty",
                "Hello World from SubBean, set via Nested Property Access");

            System.out.println(
                PropertyUtils.getNestedProperty(nested, "subBean.stringProperty"));
        }
        catch(Exception e){
            System.out.println(e);
        }
    }
}

现在,我们将创建另一个名为 SubBean.java 的类,如下所示:

public class SubBean {
    private int intProperty;
    private String stringProperty;

    public void setIntProperty(int intProperty) {
        this.intProperty = intProperty;
    }
    public int getIntProperty() {
        return this.intProperty;
    }

    public void setStringProperty(String stringProperty) {
        this.stringProperty = stringProperty;
    }
    public String getStringProperty() {
        return this.stringProperty;
    }
}

创建包含以下代码的一个类 AppLayer1Bean.java:

public class AppLayer1Bean {
    private SubBean subBean;

    public void setSubBean(SubBean subBean) {
        this.subBean = subBean;
    }
    public SubBean getSubBean(){
        return this.subBean;
    }
}

Output

让我们执行以下步骤来了解上述代码的工作原理:

  1. 将上述第一个代码另存为 BeanUtilsDemo.java。

  2. 现在,使用“运行”选项或 Ctrl+f11 执行代码,将显示以下输出。

Nested property access

PropertyUtils Method Signatures

PropertyUtils 类提供了以下方法,这些方法接受简单、索引和映射属性访问的任意组合来获取和设置指定 bean 的属性值。

  1. PropertyUtils.getProperty(Object, String)

  2. PropertyUtils.setProperty(Object, String, Object)

参数:

  1. Object : 要获取或修改其属性的 bean。

  2. String : 要获取或修改的索引和/或嵌套属性的名称。

Example

以下简单程序演示了 getProperty 和 setProperty 方法的使用:

import org.apache.commons.beanutils.PropertyUtils;

public class PropertyUtilsTest {
    public static void main(String args[]){
        try{
            Tv Color = new Tv();
            PropertyUtils.setProperty(Color, "color", "Black");
            String value = (String) PropertyUtils.getProperty(Color, "color");
            System.out.println("The color value of Tv is: " + value);
        }
        catch(Exception ex){
            ex.printStackTrace();
        }
    }
    public static class Tv{
        private String color;

        public String getColor(){
            return color;
        }
        public void setColor(String color){
            this.color = color;
        }
    }
}

按上述示例中指定的方式运行该代码,您将获得以下输出:

get and set property