`
airfly2013
  • 浏览: 18715 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

黑马程序员 JavaBean

 
阅读更多

                                    ------- android培训java培训、期待与您交流! ----------

 

 

 

JavaBean

 

 

可以认为JavaBean是一种命名规则,可以实现对象中方法与数据的分离,主要用于传递数据信息,特别是用于获取私有数据。如果要在两个模块之间传递信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象,通常称之为值对象(Value Object,简称VO)。这些信息在类中用私有字段来存储,如果读取或设置这些字段的值,则需要通过一些相应的方法来访问。

 

书写格式为:
1)必须有无参构造函数(一些类中没有无参构造器,javabean的一些功能就无法使用)。
2)属性必须私有,我们称为字段
3)提供标准的gettersetter

 

 

 

 

JavaBean属性名
JavaBean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。如果方法名为setId,中文意思即为设置id。如果方法名为getId,中文意思即为获取id。去掉set前缀,剩余部分就是属性名,如果剩余部分的第二个字母是小写的,则把剩余部分的首字母改成小的,如果第二个字母为大小,则属性名就是剩余部分。
setId()的属性名id
isLast()的属性名last
setCPU的属性名是CPU
getUPS的属性名是UPS
 

 

ReflectPoint可以为是一个javabean类。

package cn.itcast.day1;
import java.util.Date;
public class ReflectPoint {
	private int x;
	public int y;

	public int getX() {
		return x;
	}
	public int getY() {
		return y;
	}
	public void setX(int x) {
		this.x = x;
	}
	public void setY(int y) {
		this.y = y;
	}

	public ReflectPoint(int x,int y){
		super();
		this.x = x;
		this.y = y;
	}
}

 

总之,一个类被当作javaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到java类内部的成员变量。所以JavaBean中属性名,不是数据在类中对应的名称。

 

 

 

内省

 

JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省。用内省这套api操作JavaBean比用普通类的方式更方便。内省是通过反射来实现对javabean操作的技术。

 

 

属性描述器 

PropertyDescriptor 描述 Java Bean 通过一对存储器方法导出的一个属性。

通过此类的某一方法,可获得属性的getter和setter方法。

 

PropertyDescriptor的常用方法

getReadMethod()
          获得应该用于读取属性值的方法

 

//创建pt1.getClass()的属性描述器对象
		PropertyDescriptor pd = 				
				new PropertyDescriptor(propertyName,pt1.getClass());
		//获取读取X的方法
		Method methodGetX = pd.getReadMethod();
		//获取x在pt1中的值
		Object retVal = methodGetX.invoke(pt1);
 

getWriteMethod()
          获得应该用于写入属性值的方法

 

PropertyDescriptor pd2 = 
				new PropertyDescriptor(propertyName,pt1.getClass());
		//获取写入x的方法
		Method methodSetX = pd2.getWriteMethod();
		methodSetX.invoke(pt1,5);
 

 

Introspecctor

为通过工具学习有关受目标 Java Bean 支持的属性、事件和方法的知识提供了一个标准方法。字面意思可理解为类省。它提供了操作javabean的方法。

 

BeanInfo

提供有关其 bean 的方法、属性、事件等显式信息。可认为javabean对象被当做javabean看待的结果。

 

 

内省练习

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

 

//获取BeanInfo
		BeanInfo beanInfo = Introspector.getBeanInfo(pt1.getClass());
		//从beenInfo中获取pt1.getClass()的所有属性描述器
		PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
		for(PropertyDescriptor pd:pds){
			if(propertyName.equals(pd.getName())){
				//根据属性描述器获取属性的读取方法
				Method methodGetX = pd.getReadMethod();
				retVal = methodGetX.invoke(pt1);
				break;
			}
		}

 

 

 

                                           ------- android培训java培训、期待与您交流! ----------

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics