学会网站建设总结,浙江网站备案,wordpress+极简博客,网站商城如何获取流量目录
AOP组成
通知的具体方法类型
引入Spring AOP依赖
定义AOP层
UserController
Postman测试
AOP工作流程 AOP组成
切面 : 切⾯#xff08;Aspect#xff09;由切点#xff08;Pointcut#xff09;和通知#xff08;Advice#xff09;组成#xff0c;它既包含了…目录
AOP组成
通知的具体方法类型
引入Spring AOP依赖
定义AOP层
UserController
Postman测试
AOP工作流程 AOP组成
切面 : 切⾯Aspect由切点Pointcut和通知Advice组成它既包含了横切逻辑的定义也包括了连接点的定义,切⾯是包含了通知、切点和切⾯的类相当于 AOP 实现的某个功能的集合连接点 : 应⽤执⾏过程中能够插⼊切⾯的⼀个点这个点可以是⽅法调⽤时抛出异常时甚⾄修改字段时。切⾯代码可以利⽤这些点插⼊到应⽤的正常流程之中并添加新的⾏为. 切点 : Pointcut 是匹配 Join Point 的谓词,切点相当于保存了众多连接点的⼀个集合如果把切点看成⼀个表⽽连接点就是表中⼀条⼀条的数据通知 : 切⾯的⼯作被称之为通知, 实现的这个切面提供什么功能 通知的具体方法类型
前置通知: Before, 通知方法会在目标方法执行之前执行后置通知: After, 通知⽅法会在⽬标⽅法返回或者抛出异常后调⽤返回之后通知: AfterReturning, 通知方法会在目标返回后调用抛异常后通知: AfterThrowing , 通知方法会在抛出异常后调用环绕通知: Around, 通知包裹了被通知的⽅法在被通知的⽅法通知之前和调⽤之后执 ⾏⾃定义的⾏为
引入Spring AOP依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId/dependency 定义AOP层
Aspect // 定义这个类为切面
Component // 让这个类随着spring项目的启动而注入被自动识别
public class UserAspect {// 定义切点Pointcut(execution(* *com.example.springaoptest1.userController.UserController.*(..))) // 定义切点public void pc(){};Before(pc())public void doBefore() {System.out.println(执行前置通知);}Around(pc())public Object doAroud(ProceedingJoinPoint joinPoint) {System.out.println(环绕通知开始执行);Object ret;try {ret joinPoint.proceed();} catch (Throwable e) {throw new RuntimeException(e);}System.out.println(环绕通知执行之后);return ret;}}
UserController
RestController
RequestMapping(/user)
public class UserController {RequestMapping(/getUser)public String getUser() {System.out.println(do getUser!);return user;}RequestMapping(/delUser)public String delUser() {System.out.println(do delUser!);return del user;}
}
Postman测试 AOP工作流程
Spring容器启动读取所有配置中的切入点初始化bean, 判定bean对应的类中的方法是否匹配到任意切入点 匹配失败, 创建对象匹配成功, 创建原始对象的代理对象获取bean执行方法 获取bean, 调用方法并执行, 完成操作获取的是bean代理对象, 根据代理对象的运行模式, 运行原始方法, 增强的内容, 完成操作