代理模式分为两种:静态代理、动态代理
静态代理:程序在编译过程中,根据相关的信息生成相应的.class文件。
动态代理:在程序运行过程中,根据提出的相关要求生成相应的.class文件,并把.class文件加载到JVM中。
动态代理又分成两种:JDK动态代理和cglib动态代理:
JDK动态代理:基于反射机制+动态生成字节码(反射生成的效率高);proxy类和invocationhandler拦截器。利用拦截器拦截对象,然后实现这个对象所以的接口,并替代对象进行实际操作。局限性:目标类必须基于统一的接口。
cglib动态代理:基于asm,然后后期的执行效率非常高。