黑马程序员 java学习笔记——javaBean

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------

概述

1、JavaBean是一种特殊的Java类,其中的某些方法名字符合某种命名规则,如果一个Java类中的一些方法符合某种命名规则,则可以把它当作JavaBean来使用。一个JavaBean可以当做普通Java类来使用,但是一个普通Java类不一定可以当做JavaBean来使用。
2、JavaBean是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。
① 如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object,简称VO)。例如 订单信息等这些信息在类中用私有字段来存储,如果读取或设置这些字段的值,则需要通过一些相应的方法来访问,get和set方法。
② JavaBean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。如果方法名为setId,中文意思即为设置id,至于你把它存到哪个变量上,用管吗?如果方法名为getId,中文意思即为获取id,至于你从哪个变量上取,用管吗?去掉set前缀,剩余部分就是属性名,如果剩余部分的第二个字母是小写的,则把剩余部分的首字母改成小的。
示例如下:
setId()的属性名 id
isLast()的属性名 last
setCPU的属性名CPU
getUPS的属性名 UPS
总之,一个类被当作javaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到java类内部的成员变量。

3、一个符合JavaBean特点的类可以当作普通类一样进行使用,但把它当JavaBean用肯定需要带来一些额外的好处。在Java EE开发中,经常要使用到JavaBean;很多环境就要求按JavaBean方式进行操作;JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省;如果要你自己去通过getX方法来访问私有的x,用内省这套api操作JavaBean比用普通类的方式更方便。

对JavaBean的简单内省操作

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

代码示例如下:
import java.lang.reflect.*;
import java.beans.PropertyDescriptor;
import java.beans.BeanInfo;
import java.beans.Introspector;
class ReflectPoint{
	private int x;
	private int y;
	ReflectPoint(int x,int y){
		this.x=x;
		this.y=y;
	}
	public void setX(int x){
		this.x=x;
	}
	public int getX(){
		return x;
	}
	public void setY(int y){
		this.y=y;
	}
	public int getY(){
		return y;
	}
}
public class Demo3{
	public static void main(String[] args) throws Exception{
		ReflectPoint pt=new ReflectPoint(3,5);
		String propertyName="x";
		PropertyDescriptor pd=new PropertyDescriptor(propertyName,pt.getClass());
		System.out.println(pd.getName());
		
		Method methodSetX=pd.getWriteMethod();
		methodSetX.invoke(pt,9);

		Method methodGetX=pd.getReadMethod();
		Object retVal=methodGetX.invoke(pt);
		System.out.println(retVal);
	}
}
//x
//9

对JavaBean的复杂内省操作

Introspector类为通过工具学习有关受目标 Java Bean 支持的属性、事件和方法的知识提供了一个标准方法。

BeanInfo:接口,希望提供有关其 bean 的显式信息的 bean 实现者可以提供某个 BeanInfo 类,该类实现此 BeanInfo 接口并提供有关其 bean 的方法、属性、事件等显式信息。
示例代码如下:

import java.lang.reflect.*;
import java.beans.PropertyDescriptor;
import java.beans.BeanInfo;
import java.beans.Introspector;
class ReflectPoint{
	private int x;
	private int y;
	ReflectPoint(int x,int y){
		this.x=x;
		this.y=y;
	}
	public void setX(int x){
		this.x=x;
	}
	public int getX(){
		return x;
	}
	public void setY(int y){
		this.y=y;
	}
	public int getY(){
		return y;
	}
}
public class Demo{
	public static void main(String[] args) throws Exception{
		ReflectPoint pt=new ReflectPoint(3,5);
		String propertyName="x";
		PropertyDescriptor pd=new PropertyDescriptor(propertyName,pt.getClass());
		System.out.println(pd.getName());
		BeanInfo beanInfo=Introspector.getBeanInfo(pd.getClass());
		PropertyDescriptor[] pds=beanInfo.getPropertyDescriptors();
		Object retVal=null;
		for(PropertyDescriptor pdpd:pds){
			if(pdpd.getName().equals(propertyName)){
				Method method=pdpd.getReadMethod();
				retVal=method.invoke(pt);
				break;
			}
		}
	}
}
----------------------  ASP.Net+Android+IO开发S .Net培训 、期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值