JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。众所周知,属性名称符合这种模式,其他Java 类可以通过自身机制发现和操作这些JavaBean 属性。
一个类,符合JavaBean特点的类,可以当作普通类,也可以当JavaBean用,用JavaBean方式可以带来一些额外的好处 。
JDK中提供了对JavaBean进行操作的API,这套API就称为内省。
IntroSpectorTest.java
/**
*@Package:laladin.learn
*@Project:javaLearn
*@Title:IntroSpectorTest.java
*@Description:TODO
*@author Topdog topdog@163.com
*@date 2011-7-9下午11:43:25
*@version v1.0
*/
package laladin.learn;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* @ClassName:IntroSpectorTest
* @Description TODO
* @date 2011-7-9
*/
public class IntroSpectorTest {
/**
* @throws Exception
* @Title:main
* @Description:TODO
* @Param:@param args
* @Return:void
* @throws
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
ReflectPoint pt1=new ReflectPoint(3,5);
String propertyName="x";
Object retVal = getPropert(pt1, propertyName);
System.out.println(retVal);
Object value=7;
setProperties(pt1, propertyName, value);
System.out.println(pt1.getX());
}
private static void setProperties(Object pt1, String propertyName,
Object value) throws IntrospectionException,
IllegalAccessException, InvocationTargetException {
PropertyDescriptor pd2=new PropertyDescriptor(propertyName,pt1.getClass());
Method methodSetX=pd2.getWriteMethod();
methodSetX.invoke(pt1,value);
}
private static Object getPropert(Object pt1, String propertyName)
throws IntrospectionException, IllegalAccessException,
InvocationTargetException {
PropertyDescriptor pd=new PropertyDescriptor(propertyName,pt1.getClass());
Method methodGetX=pd.getReadMethod();
Object retVal =methodGetX.invoke(pt1);
return retVal;
}
}
ReflectPoint.java
/**
*@Package:laladin.learn
*@Project:javaLearn
*@Title:ReflectPoint.java
*@Description:TODO
*@author Topdog topdog@163.com
*@date 2011-7-9下午06:07:02
*@version v1.0
*/
package laladin.learn;
/**
* @ClassName:ReflectPoint
* @Description JavaBean演示
* @date 2011-7-9
*/
public class ReflectPoint {
private int x;
private int y;
/**
* <p>Title:</p>
* <p>Description:</p>
*@param x
*@param y
*/
public ReflectPoint(int x, int y) {
// TODO Auto-generated constructor stub
this.x=x;
this.y=y;
}
/**
* @return the x
*/
public int getX() {
return x;
}
/**
* @param x the x to set
*/
public void setX(int x) {
this.x = x;
}
/**
* @return the y
*/
public int getY() {
return y;
}
/**
* @param y the y to set
*/
public void setY(int y) {
this.y = y;
}
}