44. 什么是AOP? 请按照自己的理解描述一下,以及AOP的应用场景。
AOP是一种面向切面类的编程,聚焦于方法中的共性功能和逻辑
AOP运用了动态加载的技术。
45. SpringAOP中的常见的通知类型有哪些? 这些通知类型的执行时机?
AOP的常见五种的通知
@Before : 前置通知 ; ---> 前
@Around : 环绕通知 ; ---> 前 / 后
@Around("........")
public Object around(ProceedingJoinPoint pjp) {
Object result = pjp.proceed();
}
@After : 后置通知 ; -----> 后 -------> 无论原始方法运行是否出现异常, 都会运行 ;
@AfterReturning : 返回后通知 ; ------> 后 --------> 原始方法正常运行完才会运行, 出现异常不运行
@AfterThrowing : 异常抛出后通知 ; ----> 后 -------> 原始方法正常运行完不运行, 出现异常时才运行
AOP通知顺序
默认顺序: 和切面类的类名有关 ;
要设置 : @Order(10)
46. 常见的切入点表达式的写法有哪几种 ? 具体的写法是什么样的请详细说明?
AOP有两种常见切入点表达式
(1)execution(权限修饰符,返回值的类型,包名类名方法名(参数),异常)
- 可省略 : 权限修饰符 、 包名.类名、 异常声明 ------------> 包名.类名 不要省略,包名一旦省略他匹配的范围就越大,性能就会越低。
- 通配符 :
* : 单个独立的任意符号 ; ----> 返回值 、包名、类名、方法、参数 ---> 还可以匹配方法的一部分
.. : 任意层级的任意符号 ; ----> 包名 、参数
(2)@annotation(com.itheima.anno.Log) 里面的参数是自定义的全类名
- 基于注解匹配切入点方法 .