- Spring Aop 的实现需要依靠动态代理,代理方式有两种,一种是 JDK 动态代理,一种是 CGLIB 代理
- 注解的方式实现 Aop 时我们需要在配置类中添加一个注解
// 默认为 proxyTargetClass = false @EnableAspectJAutoProxy @EnableAspectJAutoProxy(proxyTargetClass = true)
- 当为 false 时,使用的是 JDK 动态代理,为 true 时使用的是 CGLIB 代理(此时代理对象和目标对象相等)
- JDK 底层实现目标对象(继承 Proxy 类),CGLIB 底层继承目标对象
- 面试题:
- 问: JDK 动态代理为什么只能基于接口
- 答: JDK 底层源码已经帮代理对象自动继承了 Proxy 这个类,由于 Java 是单继承语法,所以不可能再去继承目标对象,只能去实现目标对象
有兴趣可以关注我的个人公众号,期待我们共同进步!!!