什么是动态代理:
以AOP实现日志功能为例,能够读取XML中的声明, 并且能够找到那些需要插入日志的类和方法, 接下来就需要修改这些方法了。而在java中是不允许在运行时修改类的,但是我们可以在运行时动态的创建新的类。然后将这个新类代理老的类去实现功能。
总而言之:既然是在运行时动态的生成类,并且作为一个真实对象的代理来做事情, 那就叫动态代理

动态代理实现的方式有:jdk动态代理、cglib动态代理
jdk动态代理是由java内部的反射机制来实现的,cglib动态代理底层则是借助asm来实现的。

优缺点:
jdk动态代理,目标类必须实现的某个接口,如果某个类没有实现接口则不能生成代理对象。
cglib原理是针对目标类生成一个子类,覆盖其中的所有方法,所以目标类和方法不能声明为final类型。
从执行效率上看,Cglib动态代理效率较高。