First suppose there are the following two object classes. One class has a property that is the other class.
public class Animal { private String name; private Body body; public String getName() { return name; } public void setName(String name) { this.name = name; } public Body getBody() { return body; } public void setBody(Body body) { this.body = body; } @Override public String toString() { return "Animal [name=" + name + ", body=" + body + "]"; } } public class Body { private double weight; private double height; public double getWeight() { return weight; } public void setWeight(double weight) { this.weight = weight; } public double getHeight() { return height; } public void setHeight(double height) { this.height = height; } @Override public String toString() { return "Body [weight=" + weight + ", height=" + height + "]"; } }
Below is the test class.
import org.springframework.beans.BeanWrapper; import org.springframework.beans.PropertyAccessorFactory; import org.springframework.beans.PropertyValue; public class PropertyAccessTest { public static void main(String[] args) { Animal animal = new Animal(); animal.setBody(new Body()); System.out.println("animal=" + animal); // use the wrapper to set the property values BeanWrapper wrapper = PropertyAccessorFactory .forBeanPropertyAccess(animal); PropertyValue p1 = new PropertyValue("body.weight", 123); wrapper.setPropertyValue(p1); PropertyValue p2 = new PropertyValue("name", "tiger"); wrapper.setPropertyValue(p2); System.out.println("animal=" + animal); // use the wrapper to get the property values String[] properties = { "name", "body.weight" }; for (String p : properties) { Object v = wrapper.getPropertyValue(p); System.out.println(p + ": " + v.getClass() + " " + v); } } }Running the test class generates the following result:
animal=Animal [name=null, body=Body [weight=0.0, height=0.0]] animal=Animal [name=tiger, body=Body [weight=123.0, height=0.0]] name: class java.lang.String tiger body.weight: class java.lang.Double 123.0