1.反射
person.java
package zh.javaBean.demo; public class Person { private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } }
ClassDemo.java
package zh.javaBean.demo; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import org.junit.Test; /** * 反射 * * @author ZH * */ public class ClassDemo { @Test public void test1() throws Exception { Class<?> clazz = Class.forName("zh.javaBean.demo.Person"); // 使用无参构方法数创建对象,要求类具有无参构造方法 Person person = (Person) clazz.newInstance(); System.out.println(person);// Person [name=null, age=0] // 获取私有属性,再设置访问权限,最后修改属性值 Field nameField = clazz.getDeclaredField("name"); nameField.setAccessible(true); nameField.set(person, "小龙女"); Field ageField = clazz.getDeclaredField("age"); ageField.setAccessible(true); ageField.set(person, 18); System.out.println(person);// Person [name=小龙女, age=18] } @Test public void test2() throws Exception { Class<?> clazz = Class.forName("zh.javaBean.demo.Person"); // 获取无参构造方法 Constructor<?> NoParamCons = clazz.getConstructor(null); Person person1 = (Person) NoParamCons.newInstance(null); // 获取指定带参构造方法 Constructor<?> paramCons = clazz .getConstructor(String.class, int.class); Person person2 = (Person) paramCons.newInstance("小龙女", 19); // 获取指定方法 Method toStringMethed = clazz.getMethod("toString", null); // 调用不同对象的方法 String result1 = (String) toStringMethed.invoke(person1, null); String result2 = (String) toStringMethed.invoke(person2, null); System.out.println(result1);//Person [name=null, age=0] System.out.println(result2);//Person [name=小龙女, age=19] } }
2.内省
person.java
package zh.javaBean.demo; public class Person { private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } }
IntrospectorDemo.java
package zh.javaBean.demo; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import org.junit.Test; /** * 内省 * * @author ZH * */ public class IntrospectorDemo { @Test public void test1() throws Exception { Person person = new Person("姬如雪", 20); // 获取BeanInfo BeanInfo beanInfo = Introspector.getBeanInfo(person.getClass()); // 获取属性描述器 PropertyDescriptor[] propertyDescriptors = beanInfo .getPropertyDescriptors(); for (PropertyDescriptor descriptor : propertyDescriptors) { System.out.println(descriptor.getName() + "," + descriptor.getPropertyType()); } } @Test public void test2() throws Exception { Person person = new Person("姬如雪", 20); System.out.println(person);// Person [name=姬如雪, age=20] // 获取name的属性描述器 PropertyDescriptor pd1 = new PropertyDescriptor("name", person.getClass()); // 获取属性的写方法 Method writeMethod = pd1.getWriteMethod(); writeMethod.invoke(person, "雪儿"); System.out.println(person);// Person [name=雪儿, age=20] // 获取属性描述器 PropertyDescriptor pd2 = new PropertyDescriptor("age", person.getClass()); // 获取属性的读方法 Method readMethod = pd2.getReadMethod(); Integer age = (Integer) readMethod.invoke(person, null); System.out.println(age);// 20 } }
3.BeanUtils
导入beanUtils.jar和logging.jar
person.java
package zh.javaBean.demo; public class Person { private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } }
BeanUtilsDemo.java
package zh.javaBean.demo; import java.util.HashMap; import java.util.Map; import org.apache.commons.beanutils.BeanUtils; public class BeanUtilsDemo { public static void main(String[] args) throws Exception { Person person = new Person("小仙女", 21); // 获取属性 String name = BeanUtils.getProperty(person, "name"); String ageString = BeanUtils.getProperty(person, "age"); int age = Integer.parseInt(ageString); System.out.println(name + "," + age);// 小仙女,21 // 设置属性 BeanUtils.setProperty(person, "name", "慕容仙"); BeanUtils.setProperty(person, "age", 22); System.out.println(person);// Person [name=慕容仙, age=22] // 和Map集合一起使用 Person p = new Person(); Map<String, String> map = new HashMap<String, String>(); map.put("name", "小鱼儿"); map.put("age", "23"); // 为属性赋值 BeanUtils.populate(p, map); System.out.println(p);// Person [name=小鱼儿, age=23] } }