总结
Java反射是程序在运行时检查、修改自身结构和行为的能力。通过获取类型信息可动态创建对象、调用方法或访问属性,常用于框架开发与序列化等场景。
详细解析
Java反射(Reflection)是Java语言提供的一种动态机制,允许程序在运行时获取类的信息、操作类的属性和方法,甚至调用私有成员。这种能力使得Java代码可以突破编译时的限制,实现高度灵活的动态编程。
一、反射的核心概念
-
核心类
- Class<T>:表示一个类或接口,是反射的入口。
- Constructor<T>:表示类的构造方法。
- Method:表示类的方法。
- Field:表示类的成员变量。
二、反射的使用步骤
1. 获取Class对象
反射的起点是获取类的Class对象,常见方式:
1 2 3 4 5 6 7 8 9 |
|
2. 创建对象实例
通过Constructor创建实例,可调用私有构造方法:
1 2 3 4 5 6 7 8 9 |
|
3. 调用方法
动态调用方法(包括私有方法):
1 2 3 |
|
4. 访问字段
读写字段值(包括私有字段):
1 2 3 4 |
|
三、反射的应用场景举例
-
框架开发
- Spring:通过反射创建Bean、依赖注入。
- Hibernate/MyBatis:动态映射数据库字段到Java对象。
- JUnit:通过反射执行测试方法。
-
动态代理
JDK动态代理(Proxy)基于反射生成代理对象,实现AOP。 -
注解处理
结合反射解析自定义注解(如@RequestMapping)。 -
泛型擦除后操作
通过反射获取泛型实际类型(如List<String>中的String)。