大家好,我是神韵,是一个技术&生活博主。据说是21天成一习惯,那么有没有一个习惯可以让你坚持一年的?我来试试! 每周5讲从2021-7-19开始,今天是2021-8-21,一轮计划是2022-7-18结束。关于文章都是定位为基础,我不敢讲的太深入,因为我怕自己没时间。欢迎来点赞打卡,你们的行动将是我无限的动力。 今日主题是:大家都知道反射,那你们知道什么是内省吗?
话不多说,下面进入今日主题
内省概念
内省(Introspector) 是Java 语言对 对象(JavaBean) 类属性、方法、事件的一种缺省处理方法。 Java JDK中提供了一套 API 用来访问某个属性的 get/set 方法,这就是内省。
反射和内省区别
反射核心是在运行时去操作对象的属性等,关键是运行时的状态,而内省是对对象(JavaBean)属性等的操作,并不强调运行时。
内省机制
内省机制是通过反射来实现的,内省有IntroSpector类、BeanInfo类和PropertyDescriptor类。一般的做法是通过类 Introspector 的 getBeanInfo方法来获取某个对象的 BeanInfo 信息,然后通过 BeanInfo 来获取属性的描述器PropertyDescriptor,通过这个属性描述器就可以获取某个属性对应的 get/set方法,然后我们就可以通过反射机制来调用这些方法,这就是内省机制。
内省例子
public class OR05 {
@Test
public void test1() throws Exception {
BeanInfo info = Introspector.getBeanInfo(OR_05.class, Object.class);
PropertyDescriptor[] pds = info.getPropertyDescriptors();
for (PropertyDescriptor pd : pds) {
System.out.println(pd.getName());
}
}
@Test
public void test2() throws Exception {
OR_05 or_05 = new OR_05();
PropertyDescriptor pd = new PropertyDescriptor("name", OR_05.class);
Method method = pd.getWriteMethod();
method.invoke(or_05, "神韵");
method = pd.getReadMethod();
System.out.println(method.invoke(or_05, null));
System.out.println(pd.getPropertyType());
}
class OR_05 {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
输出结果
本文结束! ps:私信我可以进群。公众号每天会有推送,欢迎关注公众号查阅。
|