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