用于修饰注解的注解,用于描述注解在什么范围及什么阶段使用。 四个元注解介绍:
@Retention:指定注解信息在哪个阶段存在。 SOURCE:编译阶段;CLASS:解析执行阶段;RUNTIME:在JVM中。 @Target:标注注解的执行位置(ElementType.XXX)。@Document:生成注解信息到javadoc文档中。@InHerited:让注解有自动继承性。@Retention的值应该是RUNTIME,因为会结合反射技术来使用;@Target一般使用TYPE或METHOD。反射,一种计算机处理方式,对于任一对象,都能动态获取信息以及动态调用对象方法功能。 反射的优缺点:
优点: 提高了程序的灵活性和扩展性;降低耦合性,提高自适应能力;允许程序创建和控制任何类的对象,无需提前硬编码目标类。 缺点: 性能问题:反射机制应用在对灵活性和拓展性要求很高的系统框架上,普通程序不建议使用。反射会模糊程序内部逻辑,带来维护问题。为什么要获得Class? 反射操作中会获取类的成员,Constructor、Filed、Method,需要通过Class来获得其他对象。
Constructor 单个构造器,得到它就可以实例化对象。 getConstructor获取类的public构造;getConstructors获取类的所有public构造;getDeclaredConstructor获取类的private构造;getDeclaredConstructors获取类的所有private构造。 Filed 如何获取Filed? getFiled获取类的public属性;getFileds获取类的所有public属性;getDeclaredFiled获取类的private属性;getDeclaredFileds获取类的所有private属性。 赋值、取值操作 Method 如何获取一个Mehod对象?getMethod获取类的方法,包括父类的;
getMethods获取类的所有方法,包括父类的;
getDeclaredMethod获取仅本类的方法;
getDeclaredMethods获取仅本类的所有方法。
执行方法,invoke
Method的invoke使用注意事项
调用static方法
方法是静态的,invoke调用时不需要传递对象。调用参数是数组类型的方法
newProxyInstance描述 invocationHandler详解
是一个接口,接口中声明了一个invoke()(与反射不同)方法,它是在代理对象调用行为时会执行的方法,invoke方法有三个参数:动态代理在开发中可以完成性能监控、权限控制、日志记录等操作。