Java反射 — Oracle官方文档 — reflect Trail:反射 API(Java™ 教程) 2022-07-19 10:48:15
Java 注解 – Oracle官方文档 — Lesson: Annotations (The Java™ Tutorials > Learning the Java Language) 2022-07-19 10:43:22
反射:框架设计的灵魂
W3C Java反射教程
Java反射 — Oracle官方文档 — reflect Trail:反射 API(Java™ 教程) 2022-07-19 10:48:15
概述
1 | * 框架:半成品软件。可以在框架的基础上进行软件开发,简化编码 |
Java代码运行三阶段
Class对象三种获取方式
1 | /** |
Class对象功能概述
1 | 1. 获取成员变量们 |
Class对象_获取Field
1 | * Field:成员变量 |
1 | public static void main(String[] args) throws Exception { |
Class对象_获取Constructor
1 | * Constructor:构造方法 |
1 | public static void main(String[] args) throws Exception { |
Class对象_获取Method
1 | * Method:方法对象 |
1 | public static void main(String[] args) throws Exception { |
读取Properties案例
1 | * 需求:写一个"框架",不能改变该类的任何代码的前提下,可以帮我们创建任意类的对象,并且执行其中任意方法 |
代理
- 实现方式:
1
2
3
4
5
6
7
8
9
10
11
121. 静态代理:有一个类文件描述代理模式
2. 动态代理:在内存中形成代理类
* 实现步骤:
1. 代理对象和真实对象实现相同的接口
2. 代理对象 = Proxy.newProxyInstance();
3. 使用代理对象调用方法。
4. 增强方法
* 增强方式:
1. 增强参数列表
2. 增强返回值类型
3. 增强方法体执行逻辑
静态代理
动态代理
- 基于接口的动态代理
1
2提供者:JDK 官方的 Proxy 类。
要求:被代理类最少实现一个接口。 - 基于子类的动态代理
1
2提供者:第三方的 CGLib,如果报 asmxxxx 异常,需要导入 asm.jar。
要求:被代理类不能用 final 修饰的类(最终类)。
注解
概念
1 | * 概念:说明程序的。给计算机看的 |
JDK内置注解
1 | * @Override :检测被该注解标注的方法是否是继承自父类(接口)的 |
自定义注解_格式&本质
- 自定义注解
- 格式:
1
2
3
4@元注解
public 注解名称{
属性列表;//接口方法
} - 本质:注解本质上就是一个接口,该接口默认继承Annotation接口
- public interface MyAnno extends java.lang.annotation.Annotation {}
- public interface MyAnno extends java.lang.annotation.Annotation {}
- 属性:接口中的抽象方法
- 格式:
自定义注解_属性定义
- 属性的返回值类型有下列取值
1
2
3
4
5* 基本数据类型
* String
* 枚举
* 注解
* 以上类型的数组 - 定义了属性,在使用时需要给属性赋值
- 各种类型的使用
- 如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值。
- 如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可。
- 数组赋值时,值使用{}包裹。如果数组中只有一个值,则{}可以省略
- 各种类型的使用
元注解
元注解:用于描述注解的注解
- @Target:描述注解能够作用的位置
- @Retention:描述注解被保留的阶段
- @Documented:描述注解是否被抽取到api文档中
javadoc xxx.java
- @Inherited:描述注解可被子类继承
- @Target:描述注解能够作用的位置