原理:
默认java动态代理, 相同的接口,内部有个属性是原object, 故A内部调用B方法,B方法是代理前的逻辑.
cglib是一个子类, 故A内部调用B方法,B方法也是代理后的逻辑. 故cglib更牛,内部调用aop注解不会失效.
附录两篇文章:
Spring AOP注解失效的坑及JDK动态代理
Spring经过cglib proxy之后的class取注解
当你在class里加入注解,然后aop配置之后,class在实际运行时候的Class对象已经不是原本的class了,要取得原本的注解可以使用spring util包中的AnnotationUtils.findAnnotation拿取(本质上是递归获取了父类的注解),参数可以是Method/Class, 第二个参数是Annotaion的class。