1、代理对象的生成
根据策略可以使用JDK代理, 或CGLIB
2、获取此方法上的通知链
3、加载通知链, 并配置的通知加载到通知链中, 这里的通知要要转化为MethodInterceptor
4、依次判断该方法是否匹配通知链的每个通知
a、如果不匹配, 则执行下一下通知, 直接完毕后, 执行目标方法
b、如果匹配,则执行通知的方法
注意问题:
1、同一个类中, 在方法a中调用方法b,则不会再次被aop拦截, 解决方法, 将方法b抽到另一个类中, 或另一种方法:AopContext.cuuretProxy().b(), 或将本身有一个自己的引用, 当调用方法时, 使用本身的引用调用方法b
2、如果同一上方法被两个切面拦截, 先后顺序, 可以在切面类实现Ordered接口, 设置执行的优先级
参考: