Java反射机制
反射核心概念
flowchart TD
    subgraph 反射机制
        class[Class对象]
        constructor[Constructor]
        method[Method]
        field[Field]
    end
获取Class对象
// 1. 类名.class
Class<?> clazz1 = String.class;
// 2. 对象.getClass()
String str = "";
Class<?> clazz2 = str.getClass();
// 3. Class.forName()
Class<?> clazz3 = Class.forName("java.lang.String");
 
核心操作示例
// 创建实例
Constructor<?> constructor = clazz.getConstructor(String.class);
Object instance = constructor.newInstance("test");
// 调用方法
Method method = clazz.getMethod("length");
int length = (int) method.invoke(instance);
// 访问字段
Field field = clazz.getDeclaredField("value");
field.setAccessible(true);
byte[] value = (byte[]) field.get(instance);
 
动态代理
interface Service {
    void serve();
}
class RealService implements Service {
    public void serve() {
        System.out.println("实际服务");
    }
}
Service proxy = (Service) Proxy.newProxyInstance(
    Service.class.getClassLoader(),
    new Class[]{Service.class},
    (proxyObj, method, args) -> {
        System.out.println("前置处理");
        Object result = method.invoke(new RealService(), args);
        System.out.println("后置处理");
        return result;
    }
);
 
性能考虑
- 反射调用比直接调用慢约50-100倍
 
- 缓存频繁使用的Class/Method对象
 
- 考虑使用MethodHandle替代
 
- 避免在性能关键路径使用
 
应用场景
- 框架设计(如Spring IOC)
 
- 动态代理(AOP实现)
 
- 通用工具类
 
- 注解处理器
 
- 序列化/反序列化