一、反射&内省
1、反射
反射会有些许性能消耗,因为它把装载期做的事情搬到了运行期
。
2、JavaBean内省
内省机制是针对于JavaBean的,本质也是反射。
开发过程中遇到这样的问题:JavaBean对象往往具有多层继承关系,直接反射,调用cls.getFields()或者cls.getDeclaredFields()都不能获取到父类的private修饰字段。
cls.getFields() 获取的是全部公共字段,包括父类的
cls.getDeclaredFields() 获取的是子类的全部字段,但不包括父类的声明字段
这种场景以及需要获取setter和getter方法的场景都适合使用内省机制。
常用代码如下:
// JavaBean信息
BeanInfo beanInfo = Introspector.getBeanInfo(cls);
// 获取所有属性
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor pd : pds) {
// 方法名
String name = pd.getName();
// setter方法
Method writeMethod = pd.getWriteMethod();
// getter方法
Method readMethod = pd.getReadMethod();
}
也可以直接获取属性描述对象
// 直接获取属性描述对象
PropertyDescriptor pd = new PropertyDescriptor("name", cls);
其他方法不再赘述,可在实际开发中研究。