public static void main(String[] args) {
             BeanWrapper company = new BeanWrapperImpl( new Company());
             // setting the company name..
            company.setPropertyValue( "name", "Some Company Inc.");
             // ... can also be done like this:
            PropertyValue value = new PropertyValue( "name", "Some Company Inc.");
            company.setPropertyValue(value);

             // ok, let's create the director and tie it to the company:
             BeanWrapper jim = new BeanWrapperImpl( new Employee());
            jim.setPropertyValue( "name", "Jim Stravinsky");
            jim.setPropertyValue( new PropertyValue( "salary", "20000"));
            company.setPropertyValue( "managingDirector", jim.getWrappedInstance());

             // retrieving the salary of the managingDirector through the company
            Float salary = (Float) company.getPropertyValue("managingDirector.salary" );
            
            System. out.println(String. format("salary : %s", salary));
      }
public class Company {
    private String name;
    private Employee managingDirector;

    public String getName()   {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Employee getManagingDirector() {
        return this.managingDirector;
    }
    public void setManagingDirector(Employee managingDirector) {
        this.managingDirector = managingDirector;
    }
}

 

public class Employee {
      private float salary;
      private String name;

    public float getSalary() {
        return salary;
    }
    public void setSalary( float salary) {
        this.salary = salary;
    }
      public String getName() {
             return name;
      }
      public void setName(String name) {
             this. name = name;
      }
   
}

 

 

public abstract class PropertyAccessorFactory {
     /**
      * Obtain a BeanWrapper for the given target object,
      * accessing properties in JavaBeans style.
      * @param target the target object to wrap
      * @return the property accessor
      * @see BeanWrapperImpl
      */
     public static BeanWrapper forBeanPropertyAccess(Object target) {
          return new BeanWrapperImpl(target);
     }
     /**
      * Obtain a PropertyAccessor for the given target object,
      * accessing properties in direct field style.
      * @param target the target object to wrap
      * @return the property accessor
      * @see DirectFieldAccessor
      */
     public static ConfigurablePropertyAccessor forDirectFieldAccess(Object target) {
          return new DirectFieldAccessor(target);
     }

}