30-31内省访问JavaBean属性的两种方法

 

30 JavaBean的简单内省操作

 

//pt1为javaBean对象,propertyName为要设置的属性,value为给javaBean的值
private static void setProperties(Object pt1, String propertyName,
         Object value) throws IntrospectionException,
         IllegalAccessException, InvocationTargetException {
      PropertyDescriptor pd = new PropertyDescriptor(propertyName,pt1.getClass());
      Method methodSetX = pd.getWriteMethod();
       methodSetX.invoke(pt1, value);
   }
//pt1为javaBean对象,propertyName为要获取的属性
   private static Object getProperty(Object pt1, String propertyName)
         throws IntrospectionException, IllegalAccessException,
         InvocationTargetException {
      PropertyDescriptor pd=new PropertyDescriptor(propertyName, pt1.getClass());
      Method methodGetX=pd.getReadMethod();
      Object retVal=methodGetX.invoke(pt1);//因为不知道返回的是什么类型,所以用Object
      return retVal;
   }
 
 

 

31 JavaBean的复杂内省操作

演示用eclipse自动生成 ReflectPoint类的settergetter方法。

直接new一个PropertyDescriptor对象的方式来让大家了解JavaBean API的价值,先用一段代码读取JavaBean的属性,然后再用一段代码设置JavaBean的属性。

演示用eclipse将读取属性和设置属性的流水帐代码分别抽取成方法:

Ø  只要调用这个方法,并给这个方法传递了一个对象、属性名和设置值,它就能完成属性修改的功能。

Ø  得到BeanInfo最好采用“obj.getClass()”方式,而不要采用“类名.class”方式,这样程序更通用。

采用遍历BeanInfo的所有属性方式来查找和设置某个RefectPoint对象的x属性。在程序中把一个类当作JavaBean来看,就是调用IntroSpector.getBeanInfo方法, 得到的BeanInfo对象封装了把这个类当作JavaBean看的结果信息。

 

 

private static Object getProperty(Object pt1, String propertyName)throws Exception {
		/*PropertyDescriptor pd=new PropertyDescriptor(propertyName, pt1.getClass());
		Method methodGetX=pd.getReadMethod();
		Object retVal=methodGetX.invoke(pt1);//因为不知道返回的是什么类型,所以用Object
		*/
		BeanInfo beanInfo =  Introspector.getBeanInfo(pt1.getClass());
		PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
		Object retVal = null;
		for(PropertyDescriptor pd : pds){
			if(pd.getName().equals(propertyName))
			{
				Method methodGetX = pd.getReadMethod();
				retVal = methodGetX.invoke(pt1);
				break;
			}
		}
		return retVal;
	}
 

 

 

 


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值