首页 > 代码库 > java基础巩固系列(八):对javabean的内省操作

java基础巩固系列(八):对javabean的内省操作

一、关于javabean

首先,大家需要明白什么是javabean。在以前我的想法中,只要是.java结尾的文件就是javabean,这种理解是错误的。

必须满足如下条件:

         1、属性是私有的

         2、提供标准的gettter()和setter()方法

3、必须有无参数的构造函数

二、关于javabean的内省操作

内省定义:通过反射的方式访问javabean中的属性。

用到的jdk中的类:PropertyDescriptor


1、对javabean的简单内省操作:

首先,我们先定义一个简单的javabean:

package com.reflect;

public class ReflectPoint {
	private int x;
	private int y;

	public ReflectPoint(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;
	}
	
	
}
接下来,我们需要编写一个test测试

package com.reflect;

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

public class IntroSpectorTest{

	public static void main(String[] args) throws Exception {
		ReflectPoint pt1 = new ReflectPoint(3,5);
		
		String propertyName = "x"; //定义javabean中的属性名
		Object retVal = getProperty(pt1, propertyName);
		System.out.println(retVal); //3
		
		
		Object value = http://www.mamicode.com/7;>2、对javabean的复杂内省操作:

通过类 Introspector 来获取某个对象的 BeanInfo 信息,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后我们就可以通过反射机制来调用这些方法。

还是先创建一个javabean,同上:

package com.reflect;

public class ReflectPoint {
	private int x;
	private int y;

	public ReflectPoint(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;
	}
}
然后,编写一个test测试类:

package com.reflect;

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

public class IntroSpectorTest{

	public static void main(String[] args) throws Exception {
		ReflectPoint pt1 = new ReflectPoint(3,5);
		
		String propertyName = "x"; //定义javabean中的属性名
		Object retVal = getProperty(pt1, propertyName);
		System.out.println(retVal); 
		
		Object value = http://www.mamicode.com/7;>输出的结果和简单内省的相同、




 

java基础巩固系列(八):对javabean的内省操作