一.AOP(面向切面编程)简单介绍
AOP是⼀种思想:是对某⼀类事情的集中处理
二.AOP使用
1.先引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2.使用AOP的注解:
三.AOP详解
1.切点
(i)execution表达式
用于有规则的方法。
(1)切点形式
红色线中的表达式路径就是切点表达式。
(2)切点表达式
语法:
访问修饰符和异常可以省略
切点表达式支持的通配符表达:
(ii)annotation自定义注解
先写一个自定义注解annotation
再通过Around切点表达式来作用
再通过自定义注解作用于需要使用的方法上
效果和execution一样
如果需要作用每个RequestMapping的方法上也能这样写:
2.连接点
连接点指的是在切点表达式范围内作用的具体方法名和参数变量:
3.通知
(1)具体需要做的事情,也就是方法中的业务:
(2)通知类型:
(3)正常接口通知返回的顺序:
(4)接口发生异常后的通知顺序:
4.切面
切点+通知
5.注解Pointcut
(1)Poincut可以将切点的路径管理,方便后续的简写,类似于常量和枚举:
(2)其他类中通过包路径加类名和方法名就可以使用:
6.切面优先级注解Order
不同切面的优先级顺序图:
改变前:
改变后:
Order中的数字越大,优先级越低:
四.Spring AOP原理
1.代理模式
定义:为其他对象提供⼀种代理以控制对这个对象的访问. 它的作用就是通过提供⼀个代理类, 让我们 在调用目标方法的时候, 不再是直接对目标方法进行调用, 而是通过代理类间接调用。
根据代理的创建时期,代理模式分为静态代理和动态代理
(1)静态代理
概念:由程序员创建代理类或特定工具自动生成源代码再对其编译,在程序运行前代理类的
.class文件就已经存在了。
类似于租房中有一个中介,房东需要售卖或者出租房子:
此时中介已经做好了相关的工作,他本身就是为这个房子服务的,并且已经做好了准备,只需要等待租户或者买家来进行咨询:
(2)动态代理
概念:在程序运行时,运用反射机制动态创建而成,Java也对动态代理进行了实现,并给我们提供了⼀些API,常见的实现方式有两种:
(i)JDK代理
(ii)CGLIB代理
先引入依赖:
再写CGLIB动态代理类:
使用CGLIB动态代理类:
五.Spring AOP源码
自己去看