Java基础-----JavaBean内省机制

原创
2016/04/14 22:38
阅读数 150

   Java对特殊的类---JavaBean的处理方法---内省机制

   java.beans  

1、Introspector    Java提供的内省操作的工具类   

      public static BeanInfo getBeanInfo(Class<?> beanClass)    获取beanClass的描述信息 

      public static BeanInfo getBeanInfo(Class<?> beanClass, Class<?> stopClass)   获取beanClass的描述信息,排除父类stopClass的信息

      Java内省时会先从缓存总获取该类的BeanInfo,如果没有在加载;    

      public static void flushCaches()   清除所有缓存过的BeanInfo信息

      public static void flushFromCaches(Class<?> clz)  清除clz的缓存的BeanInfo信息

2.   BeanInfo   interface    描述一个JavaBean类的信息  

     public PropertyDescriptor[] getPropertyDescriptors()  获取所有的属性描述信息

      public MethodDescriptor[] getMethodDescriptors()  获取所有的方法描述信息

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());
           }
          
	}
}

  运行结果:

 

属性名称 -----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


展开阅读全文
打赏
1
10 收藏
分享
加载中
更多评论
打赏
0 评论
10 收藏
1
分享
返回顶部
顶部