一、JDK动态代理
利用Java反射机制实现代理。JDK动态代理要求被代理的类必须实现一个或多个接口,通过接口来定义代理对象的行为。在运行时,JDK动态代理会为被代理类生成一个实现了相同接口的代理类实例,并通过拦截器(InvocationHandler)来定义代理方法的具体实现
注意:被代理类必须实现了接口,否则无法被代理
二、CGLIB动态代理
CGLIB(Code Generation Library)是一个强大的高性能的代码生成库,它可以在运行时扩展Java类与实现Java接口。。CGLIB利用ASM(一个Java字节码操控和分析框架)来转换字节码并生成新的类(被代理类的子类),从而实现对被代理类方法的拦截和增强。
注意:既然是通过子类代理,则被代理类不可以是final修饰的类,另外经测试cglib可以代理接口