JavaBean是一种规范,内省是jdk提供的一系列基础API,用于对JavaBean进行操作,包括获取执行属性,方法等。
JavaBean中的Property的含义,是读写方法的属性,如下Apple类,有3个字段(Filed),分别是core,colour,isSpy。
但是却有class,core,colour,isSpy,zi这5个属性(Property)。
@Service
public class Apple {
private Core core;
private String colour;
private boolean isSpy;
public boolean isSpy() {
return isSpy;
}
public Apple setSpy(boolean spy) {
isSpy = spy;
return this;
}
public Core getCore() {
return core;
}
public Apple setCore(Core core) {
this.core = core;
return this;
}
public String getColour() {
return colour;
}
public Apple setColour(String colour) {
this.colour = colour;
return this;
}
public Zi getZi() {
return new Zi("apple zi");
}
public Apple setZi(Zi zi) {
this.core.setZi(zi);
return this;
}
}
public class IntrospectorSurprise {
public static void main(String[] args) {
try {
Apple apple = new Apple();
apple.setColour("red");
apple.setName("apple");
BeanInfo beanInfo = Introspector.getBeanInfo(apple.getClass(), Introspector.IGNORE_IMMEDIATE_BEANINFO);
for (int i = 0; i < beanInfo.getPropertyDescriptors().length; i++) {
String key = beanInfo.getPropertyDescriptors()[i].getName();
if (!key.equals("class")) {
// 得到property对应的getter方法
Method getter = beanInfo.getPropertyDescriptors()[i].getReadMethod();
Object value = getter.invoke(apple);
System.out.println("key:" + key + ", value:" + value);
}
}
} catch (IntrospectionException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
}
}
运行结果
key:colour, value:red
key:core, value:null
key:name, value:apple
key:spy, value:false
key:zi, value:Zi{name='apple zi'}



