目录
什么是Spring AOP?
像IOC和DI一样, AOP也是一种思想, 简单地说Spring框架是实现IOC思想的一个工具, 同样的 Spring AOP 一个实现了AOP思想的一个工具
AOP(Aspect Oriented Programming)---直译过来就是面向切面编程, 它是对某一类事情的集中处理思想, 是对OOP(面向对象编程)思想的补充和完善
怎么来理解呢, 举个例子博客系统中用户登录权限的验证, 当我们在系统中进行发布文章, 修改文章, 删除文章等功能时, 为了系统的安全总会在执行这些功能时进行用户信息的验证, 其中最初级的一种实现方式也是一些新手会选择的方法: 强撸,直接选择在每个业务代码里都写上验证用户信息相应的代码, 非常明显这样的做法是最低级的, 也是最麻烦的; 当我们学习一段时间后有了一定的经验, 学习了封装思想,OK对相同功能的代码可以进行封装操作, 用到时候只需要调用即可, 显然这样不仅可以减少代码量, 代码的可维护性也有了提高; 现在我们有了更高级的方式, 就是实现AOP思想, 在业务代码中只需要完成业务代码即可, 我们只需要针对校验用户信息这个功能实现一个AOP, 在执行业务代码时对需要进行用户校验的业务代码进行拦截, 这样做可以更进一步的降低代码的耦合性, 提高代码的可维护性
AOP的基础组成
AOP由切面 (Aspect), 切点(Pointcut), 通知(Advice), 连接点(Join Point) 组成
切面(Aspect)
切面: 定义当前AOP业务类型 (当前过滤器的功能是啥)
切点(Pointcut)
切点: 定义当前AOP的拦截规则 (需要拦截的业务代码路径)
连接点(Join Point)
连接点: 需要AOP进行的拦截的地方
通知(Advice)
通知: 定义什么时候, 做什么事, 是具体功能的实现
1. 前置通知: 在需要进行的拦截的业务代码执行之前执行的通知(事件)
2. 后置通知: 在需要进行的拦截的业务代码执行之后执行的通知(事件)
3. 返回之后通知: 在拦截代码返回数据之后执行的通知(事件)
4. 抛出异常之后的通知: 在拦截代码抛出异常之后执行的通知(事件)
5. 环绕通知: 在拦截方法执行前后都执行的通知(事件)
实现Spring AOP
1. 添加Spring AOP框架
在pom.xml中添加如下配置
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-bo
ot-starter-aop -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2. 定义一个切面和切点
其中func方法为空方法, 可以不要方法体, 此处的方法名只起到标识的作用, 标识下面的通知方法具体指的是哪一个切点, 因为切点有很多个
3. 定义相关的通知
通知定义的是被拦截的方法具体要执行的业务,比如用户登录权限验证方法就是具体要执行的业务Spring AOP 中,可以在方法上使用以下注解,会设置方法为通知方法,在满足条件后会通知本方法调用
前置通知使用@Before: 通知方法会在目标方法调用之前执行
后置通知使用@After: 通知方法会在目标方法返回或者抛出异常之后调用
返回之后通知使用@AfterReturning: 通知方法会在目标方法返回后调用
抛异常后通知使用@AfterThrowing: 通知方法会在目标抛出异常之后调用
环绕通知使用@Around: 通知包裹了被通知的方法, 在被通知的方法通知之前和调用之后执行自定义的行为
具体实现一个:
形如上方拦截成功, 其它的通知也如此这般, 经过上述的步骤我们就可以实现AOP了 , 以上!