什么是spring aop?
- 是什么:aop是一种编程模式,Spring AOP是基于AOP编程模式的一个框架。
- 好处:有效减少系统间的重复代码,达到模块间松耦合的目的。
- 应用场景:方法耗时统计、日志记录、事务控制、权限验证、异常处理等。
aop的基本术语是什么?
- 切面(Aspect):包括通知和切点,通常对应一个类 → 切面类。对横切逻辑的抽象和封装。
- 通知(Advice):横切逻辑的具体体现。通常对应一个方法。
-
通知类型:前置通知(@Before)、环绕通知(@Around)、后置通知(@After)、异常通知(@AfterThrowing)、最终通知(@AfterReturning)。
-
通知执行顺序:
-
无异常时:前置通知 → 环绕通知中调用目标方法前的代码 → 目标方法 → 环绕通知中调用目标方法后的代码 → 后置通知 → 最终通知
-
有异常时:前置通知 → 环绕通知中调用目标方法前的代码 → 目标方法 → 抛出异常 → 异常通知 → 最终通知
-
-
- 切点(Pointcut):声明将通知织入到哪个方法上,由切点表达式定义。
- 切点表达式:
- execution:粒度是方法级别。该表达式可以明确指出返回类型、类名、方法名和参数名。
- within:粒度是类级别。参数是全限定类名,匹配的所有类都将被当前方法环绕。
- args:匹配指定的参数类型和指定参数数量的方法,指定的参数必须是全路径的。
- this:匹配调用当前切点表达式所指对象方法的对象。
- target:匹配切点表达式指定类型的对象。
- 例子:对象A调用对象B中的方法,则:this(B) → 匹配的是A对象,target(B) → 匹配的是B对象。
- @within:匹配带有指定注解的类。
- @annotation:匹配带有指定注解的方法。
- @args:匹配使用指定的注解标注的类作为参数的方法。
- 切点表达式:
- 目标对象(Target):即将织入切面的对象。
- 代理对象(Proxy):将切面应用到目标对象之后由AOP框架创建的对象。
- 织入(Weaving):指将切面应用到目标对象从而创建一个新的代理对象的过程。