养成开发的好习惯:
1.所有的包名都是小写
2、类名都是驼峰大写
3.变量名首字母小写
4.两个. 在包层级,表示多个层级
在参数位置,表示多个参数
5.推荐如下方法使用通配符,避免方法切到底层
execution最常用,表示匹配方法执行连接点
within匹配指定类型(包括子类型)的所有连接点
args指定类型或者字方法类型的参数类型,判断参数上有没有注解
例子:只要参数是双int就切
只要被切面切了,在容器中就是代理对象
切面中的所有通知方法其实就是增强器,增强器链,他们被组织成一个链路放到集合中。目标方法真正执行前后会去增强器链中执行那些需要提前执行的方法
AOP的底层原理:增强器链
1.Spring会为每个被切面切入的组件创建代理对象(Spring CGLIB创建的代理对象,无视接口)
2.代理对象中保存了切面类里面所有通知方法构成的增强器链
3.目标方法执行是,会先去执行增强器链中拿到需要提前执行的通知方法去执行
========== 通知方法的执行顺序
1.正常链路:前置通知,目标方法,返回通知,后置通知
1.异常链路:前置通知,目标方法,异常通知,后置通知