黑马程序员---javabean及其内省操作

长平狐 发布于 2013/07/01 15:31
阅读 56
收藏 1

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

一、javabean的定义
JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器.JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。属性名称符合这种模式,其他Java 类可以通过自省机制发现和操作这些JavaBean 属性。
二、javabean的定义规则
1. 如果类的成员变量的名字是xxx,那么为了更改或获取成员变量的值,即更改或获取属性,在类中可以使用两个方法:
       getXxx(),用来获取属性xxx。
       setXxx(),用来修改属性xxx。
2. 对于boolean类型的成员变量,即布尔逻辑类型的属性,允许使用"is"代替上面的"get"和"set"。
3. 类中方法的访问属性都必须是public的。
4. 类中如果有构造方法,那么这个构造方法也是public的并且是无参数的。
三、通过内省的方式操作bean的相关属性(以下代码中故意讲Point类中的x属性设置为private的,然后通过自省的方式来操作它)

import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class TestIntroSpector{
	public static void main(String[] args) throws Exception {
		Point1 p1 = new Point1(4,5);
		String propertyName = "x";
		Object retVal = getProperty(p1, propertyName);
		System.out.println(retVal);
		
		Object value = 5;
		setProperty(p1, propertyName, value);
		System.out.println(p1.getX());
		
	}
	//重构抽取了一个getProperty方法
	private static Object getProperty(Object p1, String propertyName)
			throws IntrospectionException, IllegalAccessException,
			InvocationTargetException {
		PropertyDescriptor pd = new PropertyDescriptor(propertyName,p1.getClass());
		Method methodGetX = pd.getReadMethod();
		Object retVal = methodGetX.invoke(p1);
		return retVal;
	}
	//重构抽取了一个setProperty方法
	private static voidsetProperty(Object p1, String propertyName,
			Object value) throws IntrospectionException,
			IllegalAccessException, InvocationTargetException {
		PropertyDescriptor pd2 = new PropertyDescriptor(propertyName,p1.getClass());
		Method methodSetX = pd2.getWriteMethod();
		methodSetX.invoke(p1,value);
	}
}
class Point1{  
    private int x;  
    public int y;  
    public  Point1(int x,int y){  
        super();  
        this.x=x;  
        this.y=y;  
    }
	public int getX() {
		return x;
	}
	public void setX(int x) {
		this.x = x;
	}
	public int getY() {
		return y;
	}
	public void setY(int y) {
		this.y = y;
	}  
}    



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

原文链接:http://blog.csdn.net/voiceofnet/article/details/7267240
加载中
返回顶部
顶部