반응형
import org.apache.commons.beanutils.DynaBean;
import org.apache.commons.beanutils.DynaClass;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.LazyDynaBean;
import org.apache.commons.beanutils.DynaProperty;
import org.apache.commons.beanutils.BasicDynaClass;

import java.util.Map;
import java.util.List;
import java.util.Date;
import java.util.HashMap;
import java.util.GregorianCalendar;

public class DynaBeansExampleV1 {
  public static void main(String args[]) throws Exception {
    Object movie = createMovieBean();
    System.err.println(BeanUtils.getProperty(movie, "title"));
    System.err.println(BeanUtils.getProperty(movie, "director.name"));
  }

  private static Object createMovieBean() throws Exception {

    // first create the properties
    DynaProperty properties[] = new DynaProperty[] {
      new DynaProperty("title", String.class),
      new DynaProperty("dateOfRelease", Date.class),
      new DynaProperty("keywords", String[].class),
      new DynaProperty("genre", Map.class),
      new DynaProperty("actors", List.class),
      new DynaProperty("director", DynaBean.class)
    };

    // next using the properties define the class
    DynaClass movieClass = new BasicDynaClass("movie", null, properties);

    // now, with the class, create a new instance
    DynaBean movieBean = movieClass.newInstance();

    // set its properties
    movieBean.set("title", "The Italian Job");
    movieBean.set("dateOfRelease",
      new GregorianCalendar(1969, 0, 1).getTime());
    movieBean.set("keywords", new String[] {"Italy", "Bank Robbery"});

    Map genre = new HashMap();
    genre.put("THR", "Thriller");

    movieBean.set("genre", genre);
    movieBean.set("genre", "ACT", "Action");

    DynaBean director = createPersonBean();
    director.set("name", "Peter Collinson");
    director.set("gender", new Integer(1));

    movieBean.set("director", director);

    return movieBean;
  }

  private static DynaBean createPersonBean() {
    DynaBean person = new LazyDynaBean();
    return person;
  }
}

Posted by 1010