博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaBean的简单内省操作 以及复杂内省操作
阅读量:5283 次
发布时间:2019-06-14

本文共 2796 字,大约阅读时间需要 9 分钟。

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

 

 

 

转载于:https://www.cnblogs.com/yuedongwei/archive/2012/02/04/4145532.html

你可能感兴趣的文章
【京东咚咚架构演进】-- 好文收藏
查看>>
【HTML】网页中如何让DIV在网页滚动到特定位置时出现
查看>>
文件序列化
查看>>
jQuery之end()和pushStack()
查看>>
Bootstrap--响应式导航条布局
查看>>
Learning Python 009 dict(字典)和 set
查看>>
JavaScript中随着鼠标拖拽而移动的块
查看>>
HDU 1021 一道水题
查看>>
The operation couldn’t be completed. (LaunchServicesError error 0.)
查看>>
php每天一题:strlen()与mb_strlen()的作用分别是什么
查看>>
工作中收集JSCRIPT代码之(下拉框篇)
查看>>
《转载》POI导出excel日期格式
查看>>
code异常处理
查看>>
git - 搭建最简单的git server
查看>>
会话控制
查看>>
推荐一款UI设计软件Balsamiq Mockups
查看>>
Linux crontab 命令格式与详细例子
查看>>
百度地图Api进阶教程-地图鼠标左右键操作实例和鼠标样式6.html
查看>>
游标使用
查看>>
LLBL Gen Pro 设计器使用指南
查看>>