Java对特殊的类---JavaBean的处理方法---内省机制html
java.beans java
public static BeanInfo getBeanInfo(Class<?> beanClass) 获取beanClass的描述信息 缓存
public static BeanInfo getBeanInfo(Class<?> beanClass, Class<?> stopClass) 获取beanClass的描述信息,排除父类stopClass的信息工具
Java内省时会先从缓存总获取该类的BeanInfo,若是没有在加载; this
public static void flushCaches() 清除全部缓存过的BeanInfo信息spa
public static void flushFromCaches(Class<?> clz) 清除clz的缓存的BeanInfo信息code
public PropertyDescriptor[] getPropertyDescriptors() 获取全部的属性描述信息htm
public MethodDescriptor[] getMethodDescriptors() 获取全部的方法描述信息ip
package test; import java.util.Date; public class Parent { private String parentName; private int parentAge; private Date parentBorn; public String getParentName() { return parentName; } public void setParentName(String parentName) { this.parentName = parentName; } public int getParentAge() { return parentAge; } public void setParentAge(int parentAge) { this.parentAge = parentAge; } public Date getParentBorn() { return parentBorn; } public void setParentBorn(Date parentBorn) { this.parentBorn = parentBorn; } }
package test; import java.util.Date; public class Sub extends Parent { private String subName; private int subAge; private Date subBorn; public String getSubName() { return subName; } public void setSubName(String subName) { this.subName = subName; } public int getSubAge() { return subAge; } public void setSubAge(int subAge) { this.subAge = subAge; } public Date getSubBorn() { return subBorn; } public void setSubBorn(Date subBorn) { this.subBorn = subBorn; } }
package test; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.MethodDescriptor; import java.beans.PropertyDescriptor; public class TestIntrospector { public static void main(String[] args) throws Exception { //获取JavaBean的信息,排除父类Object的信息 BeanInfo beanInfo = Introspector.getBeanInfo(Sub.class,Object.class); //JavaBean的属性信息 for(PropertyDescriptor pd :beanInfo.getPropertyDescriptors()){ System.out.println("属性名称 -----"+pd.getName()); System.out.println("属性类型 -----"+pd.getPropertyType().toGenericString()); System.out.println("属性的get方法 -----"+pd.getReadMethod().toGenericString()); System.out.println("属性的set方法 -----"+pd.getWriteMethod().toGenericString()); } //JavaBean的方法信息 for(MethodDescriptor md:beanInfo.getMethodDescriptors()){ System.out.println(md.getDisplayName()); } for(BeanInfo bi :beanInfo.getAdditionalBeanInfo()){ System.out.println("关联的类--"+bi.toString()); } } }
运行结果:get
属性名称 -----parentAge 属性类型 -----int 属性的get方法 -----public int test.Parent.getParentAge() 属性的set方法 -----public void test.Parent.setParentAge(int) 属性名称 -----parentBorn 属性类型 -----public class java.util.Date 属性的get方法 -----public java.util.Date test.Parent.getParentBorn() 属性的set方法 -----public void test.Parent.setParentBorn(java.util.Date) 属性名称 -----parentName 属性类型 -----public final class java.lang.String 属性的get方法 -----public java.lang.String test.Parent.getParentName() 属性的set方法 -----public void test.Parent.setParentName(java.lang.String) 属性名称 -----subAge 属性类型 -----int 属性的get方法 -----public int test.Sub.getSubAge() 属性的set方法 -----public void test.Sub.setSubAge(int) 属性名称 -----subBorn 属性类型 -----public class java.util.Date 属性的get方法 -----public java.util.Date test.Sub.getSubBorn() 属性的set方法 -----public void test.Sub.setSubBorn(java.util.Date) 属性名称 -----subName 属性类型 -----public final class java.lang.String 属性的get方法 -----public java.lang.String test.Sub.getSubName() 属性的set方法 -----public void test.Sub.setSubName(java.lang.String) setSubAge setParentAge getSubBorn setParentName getParentBorn setSubBorn setParentBorn getSubName getParentName getSubAge getParentAge setSubName