package beantest; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import org.apache.commons.beanutils.BasicDynaBean; import org.apache.commons.beanutils.BasicDynaClass; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.DynaBean; import org.apache.commons.beanutils.DynaProperty; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.lang.StringUtils; public class BeanUtilsUsage { public static void main(String[] args) throws Exception { // demoNormalJavaBeans(); // demoDynaBeans(); Address addr1 = new Address("CA1234", "xxx", "Los Angeles", "USA"); Address addr2 = new Address("100000", "xxx", "Beijing", "China"); Address[] addrs = new Address[2]; addrs[0] = addr1; addrs[1] = addr2; Customer cust = new Customer(123, "John Smith", addrs); Map propertyMap = new HashMap(); // ok所有的都会转换成为String propertyMap = BeanUtils.describe(cust); logMap(propertyMap); // 错误,会按照原来的类型进行转换 Long不能转为String (Customer id is long type) /* * propertyMap = PropertyUtils.describe(cust); * * * * logMap2(propertyMap); * * // 错误,会按照原来的类型进行转换 Long不能转为String (Customer id is long type) //Map<String,String>改成<String * ,Object>比较好 /*propertyMap = PropertyUtils.describe(cust); * * logMap(propertyMap); */ propertyMap = PropertyUtils.describe(cust); logMap2(propertyMap); } static void logMap(Map<String, String> map) { /* * always <Map.Entry> as Object stored in entrySet */ Set<Map.Entry<String, String>> entrySet = map.entrySet(); /* * Iterator keeps the object in this collection */ Iterator<Map.Entry<String, String>> iterator = entrySet.iterator(); while (iterator.hasNext()) { Map.Entry<String, String> entry = iterator.next(); System.out.print(entry.getKey() + ": "); System.out.println(entry.getValue()); } } static void logMap2(Map<String, Object> map) { /* * always <Map.Entry> as Object stored in entrySet */ Set<Map.Entry<String, Object>> entrySet = map.entrySet(); /* * Iterator keeps the object in this collection */ Iterator<Map.Entry<String, Object>> iterator = entrySet.iterator(); while (iterator.hasNext()) { Map.Entry<String, Object> entry = iterator.next(); System.out.print(entry.getKey() + ": "); System.out.println(entry.getValue()); } } public static void demoNormalJavaBeans() throws Exception { System.out .println(StringUtils.center(" demoNormalJavaBeans ", 40, "=")); // data setup Address addr1 = new Address("CA1234", "xxx", "Los Angeles", "USA"); Address addr2 = new Address("100000", "xxx", "Beijing", "China"); Address[] addrs = new Address[2]; addrs[0] = addr1; addrs[1] = addr2; Customer cust = new Customer(123, "John Smith", addrs); // accessing the city of first address String cityPattern = "addresses[0].city"; String name = (String) PropertyUtils.getSimpleProperty(cust, "name"); String city = (String) PropertyUtils.getProperty(cust, cityPattern); Object[] rawOutput1 = new Object[] { "The city of customer ", name, "'s first address is ", city, "." }; System.out.println(StringUtils.join(rawOutput1)); // setting the zipcode of customer's second address String zipPattern = "addresses[1].zipCode"; if (PropertyUtils.isWriteable(cust, zipPattern)) { System.out.println("Setting zipcode ..."); PropertyUtils.setProperty(cust, zipPattern, "200000"); } String zip = (String) PropertyUtils.getProperty(cust, zipPattern); Object[] rawOutput2 = new Object[] { "The zipcode of customer ", name, "'s second address is now ", zip, "." }; System.out.println(StringUtils.join(rawOutput2)); System.out.println(); } public static void demoDynaBeans() throws Exception { System.out.println(StringUtils.center(" demoDynaBeans ", 40, "=")); // creating a DynaBean DynaProperty[] dynaBeanProperties = new DynaProperty[] { new DynaProperty("name", String.class), new DynaProperty("inPrice", Double.class), new DynaProperty("outPrice", Double.class), }; BasicDynaClass cargoClass = new BasicDynaClass("Cargo", BasicDynaBean.class, dynaBeanProperties); DynaBean cargo = cargoClass.newInstance(); // accessing a DynaBean cargo.set("name", "Instant Noodles"); cargo.set("inPrice", new Double(21.3)); cargo.set("outPrice", new Double(23.8)); System.out.println("name: " + cargo.get("name")); System.out.println("inPrice: " + cargo.get("inPrice")); System.out.println("outPrice: " + cargo.get("outPrice")); System.out.println(); } }
===================================================================
package beantest; public class Customer { private long id; private String name; private Address[] addresses; public Customer() { } public Customer(long id, String name, Address[] addresses) { this.id = id; this.name = name; this.addresses = addresses; } public Address[] getAddresses() { return addresses; } public void setAddresses(Address[] addresses) { this.addresses = addresses; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
==================================================================
package beantest; /* * Java bean注意标准 */ public class Address { private String zipCode; private String addr; private String city; private String country; public Address() { } public Address(String zipCode, String addr, String city, String country) { this.zipCode = zipCode; this.addr = addr; this.city = city; this.country = country; } public String getAddr() { return addr; } public void setAddr(String addr) { this.addr = addr; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getZipCode() { return zipCode; } public void setZipCode(String zipCode) { this.zipCode = zipCode; } }