动态代理在 Java 中有着广泛的应用,例如:Spring AOP 面向切面编程,Hibernate 数据查询、以及 RPC Dubbo 远程调用等,都有非常多的实际应用@mikechen
目录
Java 动态代理原理
按照代理的创建时期,代理类可以分为两种:
- 静态代理:由程序员创建或特定工具自动生成源代码,再对其编译,在程序运行前,代理类的 .class 文件就已经存在了。
- 动态代理:在程序运行时,可以运用反射机制动态创建代理类的 .class 文件。
动态代理类与静态代理类最主要的不同点是:代理类的字节码不是在程序运行前生成的,而是在程序运行时再虚拟机中程序自动创建的。
动态代理的实现方式很多。例如:JDK 自身提供的动态代理,就利用了上面提到的反射机制。除了反射,动态代理还可以通过 CGLib 来实现,而 CGLib 是基于 ASM(一个 Java 字节码操作框架)而非反射实现的。
简单来说,动态代理是一种行为方