Ch03 AOP

8/2/2019 SpringJava

# AOP

底层使用动态代理实现:

image-20230425184123612

image-20230425184141623

image-20230425184157253

image-20230425184211673

image-20230425184221117

aspectj:在编译器或类加载的时候植入,不会创建一个全新的类

加入maven依赖:

<dependency>
   <groupId>org.aspectj</groupId>
   <artifactId>aspectjweaver</artifactId>
   <version>1.9.7</version>
</dependency>
1
2
3
4
5

使用aop步骤:

要代理的方法必须放在接口里,除非使用cglib(通过子类)

  1. 被代理的类:

image-20230425184255055

  1. 切面类:image-20230425184312988
  2. xml配置文件:image-20230425184324641

注意使用接口类接受bean

image-20230425184336133

前置通知在方法执行之前被执行

后置通知在方法执行之后被执行(无论发不发生异常都会执行),还不能访问方法运行的结果

  • 返回通知:可以获取运行的结果:

image-20230425184349409

  • 异常通知:可以访问到异常:image-20230425184406033
  • 环绕通知:类似于动态代理:image-20230425184420890

切面优先级:

可以通过注解@order设置,值越小,优先级越高

image-20230425184432314

可以使用@PointCut来声明切入点表达式:一般方法体内不写内容

后面其他通知直接引用切入点表达式来声明方法名

image-20230425184443263

用xml配置文件来配置aop:

image-20230425184452594

aop:config中必须包含pointcut和aspect

https://blog.csdn.net/u014785687/article/details/76861150

Last Updated: 11/19/2024, 1:54:38 PM