重点突出四个字:动态代理
SpringAOP 的底层实现是使用了代理模式,生成代理类有两种方式:JDK 和 CGLIB 。
默认情况下时使用 JDK 动态代理。
JDK:实现被代理类的接口,生成一个代理类。和被代理类是兄弟关系。
CGLIB:继承被代理类,生成一个子类。和被代理类是父子关系。
1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP
2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP
3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间转换