Java BeanUtils - การเข้าถึงคุณสมบัติที่ซ้อนกัน

คำอธิบาย

คุณสามารถเข้าถึงค่าของคุณสมบัติที่ซ้อนกันของ bean โดยการต่อชื่อคุณสมบัติของเส้นทางการเข้าถึงโดยใช้ "." ตัวคั่น

คุณสามารถรับและตั้งค่าของ Nested คุณสมบัติโดยใช้วิธีการด้านล่าง:

  • PropertyUtils.getNestedProperty (ออบเจ็กต์, สตริง)

  • PropertyUtils.setNestedProperty (Object, String, Object)

พารามิเตอร์:

  • Object: เป็นถั่วที่มีคุณสมบัติที่จะได้รับหรือแก้ไข

  • String: เป็นชื่อของคุณสมบัติที่ซ้อนกันที่จะได้รับหรือแก้ไข

ตัวอย่าง

ในตัวอย่างนี้คุณจะเห็นวิธีรับและตั้งค่าคุณสมบัติที่ซ้อนกัน เราจะสร้างสามคลาส SubBean , 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;
    }	
}

เอาต์พุต

ลองทำตามขั้นตอนต่อไปนี้เพื่อดูว่าโค้ดด้านบนทำงานอย่างไร:

  • บันทึกรหัสแรกข้างต้นเป็นBeanUtilsDemo.java

  • ตอนนี้รันโค้ดโดยใช้ตัวเลือก Run หรือ Ctrl + f11 และเอาต์พุตด้านล่างจะปรากฏขึ้น

ลายเซ็นของวิธี PropertyUtils

เมธอดต่อไปนี้จัดเตรียมโดยคลาสPropertyUtilsซึ่งยอมรับการรวมกันของการเข้าถึงคุณสมบัติแบบง่ายดัชนีและแมปโดยพลการเพื่อรับและตั้งค่าคุณสมบัติของ bean ที่ระบุ

  • PropertyUtils.getProperty (ออบเจ็กต์สตริง)

  • PropertyUtils.setProperty (Object, String, Object)

พารามิเตอร์:

  • Object: เป็นถั่วที่มีคุณสมบัติที่จะได้รับหรือแก้ไข

  • String: เป็นชื่อของคุณสมบัติที่จัดทำดัชนีและ / หรือซ้อนกันที่จะได้รับหรือแก้ไข

ตัวอย่าง

โปรแกรมง่ายๆต่อไปนี้แสดงให้เห็นถึงการใช้เมธอด 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;
        }
    }
}

เรียกใช้รหัสตามที่ระบุในตัวอย่างด้านบนและคุณจะได้รับผลลัพธ์ด้านล่าง: