且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

JavaBean的简单内省操作 以及复杂内省操作

更新时间:2022-08-13 08:27:36

2段简单的JavaBean代码演示了简单内省操作以及复杂内省操作  。

1、简单内省操作

package me.test;
import java.lang.reflect.*;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
public class IntroSpectorTest
{
   public  static void main(String []args) throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException
   {
    JavaBeanTest t=new JavaBeanTest() ;
    t.setX(10);
    PropertyDescriptor d=new PropertyDescriptor("X",JavaBeanTest.class);
    setProperty(t, d);
    Object val = getProperty(t, d);
    System.out.println(val);
   
   }

private static Object getProperty(JavaBeanTest t, PropertyDescriptor d)
  throws IllegalAccessException, InvocationTargetException {
 Method mr=d.getReadMethod()  ;
    Object val=mr.invoke(t);
 return val;
}

private static void setProperty(JavaBeanTest t, PropertyDescriptor d)
  throws IllegalAccessException, InvocationTargetException {
    Method mw=d.getWriteMethod()  ;
    mw.invoke(t, 5) ;
}

}
class  JavaBeanTest
{
 private int x  ;
 public void setX(int x)
 {
  this.x=x ;
 }
 public int getX()
  
 {
  return this.x ;
 }
}

 

2、复杂内省操作   BeanInfo类   Introspector类的使用

package me.test;
import java.lang.reflect.*;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
public class IntroSpectorTest
{
   public  static void main(String []args) throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException
   {
    JavaBeanTest t=new JavaBeanTest(10) ;
    PropertyDescriptor d=new PropertyDescriptor("x",JavaBeanTest.class);
    setProperty(t, d);
    Object val = getProperty(t, d);
    System.out.println(val);
   
   }

private static Object getProperty(JavaBeanTest t, PropertyDescriptor d)
  throws IllegalAccessException, InvocationTargetException, IntrospectionException {
    BeanInfo beanInfo=Introspector.getBeanInfo(t.getClass()) ;  
 PropertyDescriptor  pt[]=beanInfo.getPropertyDescriptors() ;
  for(PropertyDescriptor tem:pt)
  {
   if(tem.getName().equals(d.getName()))
     {
             Method mr=tem.getReadMethod() ;
             Object val=mr.invoke(t) ;
             return val ;
     }
  }
 return null;

}

private static void setProperty(JavaBeanTest t, PropertyDescriptor d)
  throws IllegalAccessException, InvocationTargetException, IntrospectionException {
   
    BeanInfo beanInfo=Introspector.getBeanInfo(t.getClass() ) ; //把JavaBeanTest的对象当做JavaBean看有什么信息封装在BeanInfo中
    PropertyDescriptor [] pd=beanInfo.getPropertyDescriptors() ;  //Get All Properties From BeanInfo Class
    for(PropertyDescriptor tem:pd)
    {  
     if(tem.getName().equals(d.getName()))
     {
      Method mw=tem.getWriteMethod() ;
      mw.invoke(t, 50)  ;
      break ;
     }
    }
}

}
class  JavaBeanTest
{
 private int x  ;
 public JavaBeanTest(int x)
 {
  this.x=x ;
 }
 public void setX(int x)
 {
  this.x=x ;
 }
 public int getX()
  
 {
  return this.x ;
 }
}