今天我复习了反射和内省知识:
反射:Filed,
1. 需求:对于给定的对象的属性进行赋值,
2. 使用方法:已知类的全类名,获取对应的class对象,获取要获取的Filed。
1. 获取私有的Filed:getDeclsredFiled(“class”)
2. 给私有的Field赋值,现需要让其可见setAccessible(true)
3. 再对字段赋值
Method:
1. 获取对应的calss对象
2. 利用class对象的newInstance()方法创建
3. 获取setName(String)对象对应的method对象
4. 调用method对象的invoke()方法进行执行2创建的User对象的setName方法
5. 测试打印
内省:
1. 什么是内省:内省是 Java 语言对 Bean 类属性的一种缺省处理方法。
2. 一般的做法是:一般的做法是通过类 Introspector 来获取某个对象的 BeanInfo 信息,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后通过反射机制来调用这些方法
org.apache.commons.beanutils
背景:一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度
解决:BeanUtils提供对 Java反射和内省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。
Beanutils 用法:
BeanUtils.copyProperties(): 属性复制
ConvertUtils.regsiter(Converter convert, Class clazz) 注册转换器
Annotation(注释) 概述
使用 Annotation 时要在其前面增加 @ 符号, 并把该 Annotation 当成一个修饰符使用. 用于修饰它支持的程序元素
三个基本的 Annotation:
• @Override: 限定重写父类方法, 该注释只能用于方法
• @Deprecated: 用于表示某个程序元素(类, 方法等)已过时
• @SuppressWarnings: 抑制编译器警告.
自定义 Annotation
定义新的 Annotation 类型使用 @interface 关键字
Annotation 的成员变量在 Annotation 定义中以无参数方法的形式来声明. 其方法名和返回值定义了该成员的名字和类型.
可以在定义 Annotation 的成员变量时为其指定初始值, 指定成员变量的初始值可使用 default 关键字
没有成员定义的 Annotation 称为标记; 包含成员变量的 Annotation 称为元数据 Annotation
今天讲的知识感觉难度有点大,我要反复看几遍。
明天继续学习。