兼容性:
1. CGLIB 动态代理可以代理任何类型的目标类,无论它是否实现了接口;[注意的是,类被 final 修饰,那么该不可被继承,即不可被代理;同样,类中 final 修饰的方法,该方法也不可被代理;]
2.JDK 动态代理只能代理实现了接口的目标类;
3.即 CGLIB 动态代理可以覆盖 JDK 动态代理的所有场景,而 JDK 动态代理不能覆盖 CGLIB 动态代理的所有场景;
4.所以,为了保证 SpringBoot 中的 AOP (面向切面编程)功能可以应用于任何类型的
Bean (无论它是否实现了接口), SpringBoot 默认使用 CGLIB 作为代理的实现方式;