AOP的概念:
AOP(面向切面编程)是一种编程范式,底层用到了动态代理;
AOP核心思想是将方法中重复的代码逻辑剥离出来,
并在不修改原始逻辑的基础上对原始功能进行增强。
AOP的优点:
(1)不会改变代码的原始逻辑,无侵入;
(2)减少了代码的冗余,提高了代码的复用性;
(3)提高了项目的开发效率;
(4)使代码维护起来更加方便。
AOP的概念理解:
(1)连接点(JoinPoint):可以被AOP控制的方法执行(包含方法执行);
(2)通知(Advice):重复的逻辑代码;
(3)切入点(PointCut):匹配连接点的条件;
(4)切面(Aspect):通知+切点。
AOP入门步骤:
(1)在pom.xml中导入AOP的起步依赖;
(2)定义一个类,在类上添加@Aspect注解(表示当前类为一个切面类(Aspect)),
再添加@Comment注解,标识当前类是被SpringIOC容器管理的been对象;
(3)在类中定义方法抽取重复逻辑的代码,并在方法上添加通知,例如:@Around(Advice)
(4)在通知注解中配置公共代码作用于哪些目标方法(PointCut);
(5)执行目标方法;
AOP中通知的类型:
(1)@Around:此注解标注的通知方法在目标方法前、后都执行并且@Around需要自己调用
ProceedingJoinPoint.proceed()来让方法只能执行,其他通知则不需要考虑
(2)@Before:此注解标注的通知方法在目标方法前被执行
(3)@After:此注解标注的通知方法在目标方法后被执行,无论是否有异常都会执行
(4)@AfterReturning:此注解标注的通知方法在目标方法后执行,有异常不会执行
(5)@AfterThrowing:此注解标注的通知方法在发生异常后执行(有异常就会执行)
AOP中不同切面的通知,增强相同的方法,执行顺序是:
第一种排序:默认按照切面类的名称字母排序:
(1)目标前的通知方法:字母排名靠前的先执行
(2)目标后的通知方法:字母排名靠前的后执行
第二种排序:控制顺序(用@Order(数字)加在切面类上控制顺序):
(1)目标前的通知方法:数字小的先执行
(2)目标后的通知方法:数字小的后执行
AOP切点表达式:
第一种表达式:execution
第二种表达式:annotation
AOP中抽取多个通知的相同切点表达式:
@PointCut:该注解的作用是将公共的切点表达式抽取出来,需要用到时引入该切点表达式即可
在AOP中,可能会有多个通知的切入点都一样,这时候就需要使用@PointCut注解把重复的切
点表达式抽取出来放到一个公共方法中,其他方法需要时就调用它。