我现在的理解就是,Java的内省机制就是针对JavaBean的,可以获取到类的属性名称,以及属性的Getter和Setter方法,应该是在写框架的时候才会用到内省机制,还有一个地方可以用到内省机制,就是JavaBean和Map的转化的时候,需要JavaBean的内省机制去获取属性的值,这个例子在下篇文章里介绍。
代码,我先写一个JavaBean的类
package com.Day17; public class IntrospectorDemo { private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
至于什么是JavaBean去百度查吧,我的理解就是有Getter和Setter属性
main方法的类:
package com.Day17; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; public class Test { public static void main(String[] args) throws Exception{ //Java内省机制,其实就是获取类的属性和属性类型 //1,获取JavaBean的描述对象 BeanInfo beanInfo= Introspector.getBeanInfo(IntrospectorDemo.class,Object.class); //2,获取JavaBean中的属性的描述器 PropertyDescriptor [] pds=beanInfo.getPropertyDescriptors(); //3,打印出来 for (PropertyDescriptor pd:pds) { System.out.println("属性名:"+pd.getName()); System.out.println("Getter:"+pd.getReadMethod()); System.out.println("Setter:"+pd.getWriteMethod()); System.out.println("----------------------------------");
//属性是可以执行的,这应该就是反射了
System.out.println(pd.getReadMethod().invoke(new People()));
System.out.println("----------------结束---------------");
} } }
打印结果: