JAVA高新技术——JavaBean、内省、BeanUtils工具包

本文介绍了JavaBean的概念,它是一种特殊的Java类,常用于数据传递,通过封装私有字段实现信息交换。同时,文章讲解了内省技术,这是一种通过反射方便地访问JavaBean属性的API。此外,还提到了简单的内省操作和复杂操作的区别,并提及了Apache的BeanUtils工具包,它简化了JavaBean的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JavaBean

JavaBean是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。

如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object,简称VO)。

这些信息在类中用私有字段来存储,如果读取或设置这些字段的值,则需要通过一些相应的方法来访问。

可以这么说一个类中含有set与get方法,都可以称作JavaBean类。

一般来说通过get方法与set方法可以获取和操作JavaBean类中的属性,但是在框架设计中,事先并不知道get和set哪一个成员属性。需要通过反射来完成。

而通过反射获取set和get方法相对麻烦,于是SUN公司提供了对JavaBean类进行操作的一些API————内省


内省

假定有一个Point类,成员变量x,y都有get和set方法。又假定事先不知道操作哪个变量以及对象,操作变量和对象的名称是通过参数传递进来的。
如何通过内省的方式对Point类的对象的成员变量进行读写操作?

简单的内省操作——建议使用

public class PropertyDescriptorDemo {
	public static void main(String[] args) throws Exception{
		//假定下面两个数据是通过参数传递进来的
		Point pt1=new Point(2,3);
		String PropertyName="x";
		
		//通过PropertyDescriptor类导出一个属性
		PropertyDescriptor pd1=new PropertyDescriptor(PropertyName, pt1.getClass());
		//通过PropertyDescriptor的属性方法获取get和set方法
		Method readMethod=pd1.getReadMethod();
		System.out.println(readMethod.invoke(pt1));
		Method writeMethod=pd1.getWriteMethod();
		writeMethod.invoke(pt1, 100);
		System.out.println(readMethod.invoke(pt1));	
	}

}

复杂的内省操作

public class IntrospectorDemo {

	public static void main(String[] args)throws Exception {
		Point pt=new Point(2,4);
		String PropertyName ="x";
		
		//通过Introspector的方法获得BeanInfo
		BeanInfo beanInfo=Introspector.getBeanInfo(pt.getClass());
		//只有得到BeanInfo的所有属性,没有特定的某属性,需要遍历
		PropertyDescriptor[] pds= beanInfo.getPropertyDescriptors();
		for(PropertyDescriptor pd:pds){
			if(pd.getName().equals(PropertyName)){
			Method readMethod= pd.getReadMethod();
			Object reVal=readMethod.invoke(pt);
			System.out.println(reVal);
			}
		}
	}
}

BeanUtils工具包

Sun公司的内省API过于繁琐,所以Apache组织结合很多实际开发中的应用场景开发了一套简单、易用的API操作Bean的属性——BeanUtils
注意:BeanUtils包依赖于logging包,所以两个包都有导入。

BeanUtils类的方法非常简单:
static String getProperty(Object bean, String name)
static void setProperty(Object bean, String name, Object value)
注意:
1-BeanUtils工具类在对对象的属性进行操作的时候,会自动进行类型转换。例如tPoint类中的x属性为int类型,
但是设置属性值的时候传入的参数却可以是String类型,返回的也是String类。这是因为内部发生了自动类型转换。这是为了以后开发方便起见。

2-BeanUtils工具类可以对属性进行级联操作,例如Point类还有 变量Private Date Birthday ,而Date(java.util.Date)类中有setTime方法,那么也就相当于Date类型对象有一个time属性,BeanUtils就可以对其进行操作:
BeanUtils. setProperty(pt, "birthday.time", "111");


BeanUtils工具包里有很多类,比如 PropertyUtils类,他与BeanUtils类的区别在于不会自动类型转换,即Point的x是int类型的那么不会转成String类型


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值