首先看看什么是内省,我在网上找,也没找出什么具体定义,我就以自己的理解来说吧!内省是java的反射机制对javaBean的一种特例处理方式!简单说就是:内省就是javaBean在知道属性名的情况下,来访问类中的get和set方法,或得属性名的值 !!(要是不知道什么是javaBean或者不知道什么是反射,那看看其他资料吧),还有就是如果是属性值和变量值一样的话,个人觉得如果用包里反射应该也许能够达到同样的目的!不多说了!看代码吧:
第一个是一个javaBean的例子,我们操作就是对他操作!class="java">
package one;
public class JavaBeanTest {
private int x=0;
private int y=8;
private String string = new String("这是一个javabean的测试");
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;
}
public String getString() {
return string;
}
public void setString(String string) {
this.string = string;
}
}
然后是我们的主类:
package one;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) throws Exception {
// 实例化一个javabean的对象
JavaBeanTest javaBeanTest = new JavaBeanTest();
// 这是个属性名
String propertyName = new String("x");
/*
* 第一种方法
*/
// 属性描述符
// PropertyDescriptor propertyDescriptor = new
// PropertyDescriptor(propertyName, javaBeanTest.getClass());
// 通过属性名得到方法
// Method methodGetX = propertyDescriptor.getReadMethod();
// Object returnVal = methodGetX.invoke(javaBeanTest);
// System.out.println(object);
/*
* 另一种方法
*/
Object returnVal = null;
BeanInfo beanInfo = Introspector.getBeanInfo(javaBeanTest.getClass());
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor pd : pds) {
if (pd.getName().equals(propertyName)) {
Method methodGetX = pd.getReadMethod();
returnVal = methodGetX.invoke(javaBeanTest);
break;
}
}
System.out.println(returnVal);
}
}
在这个类里我用了两种方法,第一种是比较简单,也可以解决问题,第二种是常规方法,大多网上都是用的这种方!
分享让更多人收益!