Spring中的AOP|学习笔记

简介: 快速学习Spring中的AOP

开发者学堂课程【高校精品课-厦门大学 -JavaEE 平台技术Spring中的AOP学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/80/detail/15930


Spring中的AOP


内容介绍

一、基本概况

二、切点的定义

三、例子

 

一、基本概况

Spring 是怎样实现 AOP 的呢?

Spring 主要是通过动态代理机制来实现 AOP的。Spring 中最重要的概念就是会创建和管理 bing对象。

之前讲解过在创建 bing对象不是直接将其注入到使用的地方,而是动态代理。所以使用动态代理的机制实现 AOP的一些功能。也就是在动态代理上面可以根据我们AOP中间的定义将一些沙子掺在动态代理上面。

这样也使得在 spring中的 AOP切点主要在方法上面。AOP的框架中首先要先定义一个切面,但是并没有定义一个新的语法来定义切面,而是利用了类的语法。所以类和类里面的属性方法都是可以用的。

图片20.png

通过这个注解来定义了这个类的切面,那么这个注解就是aspect,写在类的定义前面定义这个类是一个切面。

在切面内定义两个东西,一个是 pointcut,一个是 advice。那么 pointcut其实是

一个条件,到底哪些连接点是需要掺沙子的地方。用一个 pointcut的标签来定义一个切点,和它的条件之前注解的属性内,但是这个注解是要放在一个位置上面的,放在属性前面或者方法前面,通常将注解放在方法前面,而这个方法里面是没有内

容,作用就是为了定义切点,pointcut 的注解。

图片32.png

advice 就是一个方法同样是用一种标签定义 advice的时间,方法里面的内容只是advice 要做的事情。

 

二、切点的定义

首先来看切点的定义:定义在一个方法前面的。那么定义的时候aspect的定义符。由于切点主要在方法上面,所以最常用的是四个定义符。

图片33.png

1、args 表示方法的参数应该是由特定的类型的。

2、@args表示方法的参数加了凸点标解。第一个方法的方法类型满足连接点。第二

个是这个方法上如果是加了这个特定的注解,这个方法就是连接点。

3、execution,表示这个方法本身的名字符合一定的条件,就是连接点。

4、@annotation表示方法前面加了特定的注解,这是连接点。

其实最常使用的是@annotation,用条件去隐含的定义哪些是连接点是不太方便

的。用标签、注解,显示的说明这个地方要添加一个东西进去,所以第四个比较简单@annotation。

 

三、例子

用注解来定义这个点,下面看两个例子。

1、一个是用方法名字:execution(*xmu.restdemo.service.*(..))所以在artpoint里面定义的是一个 aspect的定义符,用引号来包含。

execution表示在这个 restdemo.service.下面的所有的方法,无论是什么,都会要掺沙子。可以看到方法里面是没有类型的。所以这个方法主要是作为一个载体,用来在里面定义注解。

2、第二个注解定义的是一个标签:

@annotation(xmu.attend.annotation.audit)定义的标签叫做@audit,所以加入这个标签的就是掺沙子的。在 advice前面用5个 advice的标签来标识这个方法是advice。这个标签标识了advice在什么时候执行。

1、@before在方法执行之前。

2、@after是在方法执行之后。

3、@afterreturning是在方法成功完成执行结果返回之后

4、@afterthrowing抛出某个特定的错误

5、@around表示方法执行之前和执行之后

至于在这个点上做什么,在 advice 这个方法里面去写的代码。在方法可以做很多事情。在方法执行之前可以判断方法的参数,判断这个方法的参数是否符合一定的

要求。或者拿到一些值设定到这个方法的参数上面。

可以在方法执行完成之后将方法的返回值做一些过滤或者修改,再将其返回客户

端。以上都是可以再 advice 中可以做的事情。

相关文章
|
3天前
|
前端开发 Java 数据库
浅谈Spring AOP 面向切面编程 最通俗易懂的画图理解AOP、AOP通知执行顺序~
浅谈Spring AOP 面向切面编程 最通俗易懂的画图理解AOP、AOP通知执行顺序~
|
3天前
|
XML Java 数据格式
技术好文:Spring基础篇——AOP切面编程
技术好文:Spring基础篇——AOP切面编程
|
1天前
|
消息中间件 安全 Java
学习认识Spring Boot Starter
在SpringBoot项目中,经常能够在pom文件中看到以spring-boot-starter-xx或xx-spring-boot-starter命名的一些依赖。例如:spring-boot-starter-web、spring-boot-starter-security、spring-boot-starter-data-jpa、mybatis-spring-boot-starter等等。
15 4
|
2天前
|
XML Java 数据格式
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
7 1
|
1天前
|
Java 开发者 Spring
使用Spring Boot AOP实现日志记录
使用Spring Boot AOP实现日志记录
|
2天前
|
XML 安全 Java
Spring 基础知识学习
Spring 基础知识学习
|
2天前
|
Java Spring 容器
Spring5系列学习文章分享---第六篇(框架新功能系列+整合日志+ @Nullable注解 + JUnit5整合)
Spring5系列学习文章分享---第六篇(框架新功能系列+整合日志+ @Nullable注解 + JUnit5整合)
5 0
|
2天前
|
XML Java 数据库
Spring5系列学习文章分享---第五篇(事务概念+特性+案例+注解声明式事务管理+参数详解 )
Spring5系列学习文章分享---第五篇(事务概念+特性+案例+注解声明式事务管理+参数详解 )
6 0
|
2天前
|
SQL Java 数据库连接
Spring5系列学习文章分享---第四篇(JdbcTemplate+概念配置+增删改查数据+批量操作 )
Spring5系列学习文章分享---第四篇(JdbcTemplate+概念配置+增删改查数据+批量操作 )
6 0
|
2天前
|
XML Java 数据格式
Spring5系列学习文章分享---第三篇(AOP概念+原理+动态代理+术语+Aspect+操作案例(注解与配置方式))
Spring5系列学习文章分享---第三篇(AOP概念+原理+动态代理+术语+Aspect+操作案例(注解与配置方式))
5 0