官网地址
划重点
AOP原理
一般由jdk动态代理实现(如果子类实现父类接口),若没有实现接口则由cglib创建代理子类生成。
由此可以看出cglib是通过创建子类来覆盖方法的,so 方法上不能为final
代理图
我们可以看到在使用动态代理的时候,会先调用Proxy方法,执行相关逻辑,再调用子类方法。
@AspectJ
@AspectJ原理
我们可以看到,AspectJ是编译的时候静态编入字节码进行运行滴~
@Before,@Around等等注解原理
注解
我们可以看到它是属于咨询类Advice类
Spring
1.定义Advice
2.ProxyFactory创建代理类
下面是本地idea自己写的一个方法
在创建代理类的时候把咨询类赋给它。
拦截器也可以实现该效果
还有一个,omg
Advisor
脑瓜嗡嗡嗡…
不起作用的坑
举一反三
之前在一篇成大的博客讲@Async不起作用,因为也是这个,如果你在某serviceImpl去调用自己的相关方法,是调用this.xx(),而不是代理类,所以方法上的注解都会失效。