反射允许运行时获取类信息并操作属性方法,核心类包括Class、Field,提升程序灵活性,助于理解Spring等框架设计原理。
反射和代理是Java中非常重要的高级特性,它们让程序具备了更强的灵活性和动态性。理解这两个概念对掌握框架设计原理(比如Spring)有很大帮助。
反射:运行时获取类信息并操作
反射机制允许程序在运行时动态地获取类的信息,并能操作类的属性和方法,而不需要在编译期确定具体类型。
核心类:主要通过Class、Field、等类来实现。
- 通过Class.forName("全类名")加载类
- 可以调用getDeclaredMethods()、getField()等方法获取成员
- 能够绕过访问控制,调用私有方法或访问私有字段(setAccessible(true))
- 动态创建对象:newInstance() 或通过构造器Constructor.newInstance()
应用场景包括:通用框架(如JSON序列化、ORM映射)、注解处理、测试工具等。
代理Proxy:为对象提供一种间接访问方式
代理模式通过创建一个代理对象来控制对原对象的访问。Java中的动态代理主要依赖接口。
核心接口与类:
- 方法
- 实现
Java动态代理要求被代理类必须实现至少一个接口,代理对象会实现相同的接口。
示例用途:日志记录、权限校验、事务管理等横切关注点的统一处理。
反射与代理的关系
动态代理的底层实现依赖于反射机制。当调用代理对象的方法时,请求会被转发到方法,其中通过反射执行目标方法。
也就是说,代理提供了结构上的拦截能力,而反射提供了实际调用目标方法的能力。
两者结合,使得可以在不修改原始类代码的前提下,增强其行为,这正是AOP(面向切面编程)的基础。
基本上就这些。理解清
楚反射怎么“看”和“动”类,代理怎么“拦”和“转”调用,就能明白很多框架背后的运作逻辑。">








