Spring AOP - AspectJ
发布日期:2021-06-30 17:03:56
浏览次数:2
分类:技术文章
本文共 2534 字,大约阅读时间需要 8 分钟。
springboot
org.springframework.boot spring-boot-starter-aop
AOP
package com.cy.myblog.controller.aspect;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.AfterThrowing;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.springframework.stereotype.Component;import lombok.extern.slf4j.Slf4j;@Slf4j@Aspect@Componentpublic class SysLogAspect { @Pointcut("execution(* com.cy.myblog.service.*.*(..))") public void doLog() { } @Before("doLog()") public void doBefore() { log.info("######### doBefore #########"); } @Around("doLog()") public Object doRound(ProceedingJoinPoint jp ) throws Throwable { try { log.info("######### doRound - before #########"); Object result = jp.proceed(); log.info("######### doRound - after #########"); return result ; } catch (Throwable e) { log.info("######### doRound - exception #########"); throw e ; } finally { log.info("######### doRound - finally #########"); } } @After("doLog()") public void doAfter() { log.info("######### doAfter #########"); } @AfterReturning(pointcut = "doLog()" , returning = "result") public Object doAfterReturn(Object result) { log.info("######### doAfterReturn:resutl=[{}] #########", result); return result ; } @AfterThrowing(pointcut = "doLog()" , throwing = "e") public void doAfterThrowing(Exception e) { log.info("######### doAfterThrowing:exception=[{}] #########", e.getMessage()); } }
AOP 概念
-
通知(Advice)
指切面(定义为aspect的类)中的工作; -
spring切面可以应用的五种通知:
- 前置通知(Before):在目标方法被调用之前调用通知功能;
- 后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么;
- 返回通知(After-returning):在目标方法成功执行之后调用通知;
- 异常通知(After-throwing):在目标方法抛出异常后调用通知;
- 环绕通知(Around):通知报过了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。
-
连接点(Join point)
连接点是在应用执行过程中能够插入切面的一个点。这个点可以是调用方法时,抛出异常时,甚至修改一个字段时。切面代码可以利用这些点插入到应用的正常流程之中,并添加新的行为。(切点方法中配置的匹配的方法都是连接点) -
切点(Pointcut)
定义通知所要织入的一个或多个连接点。 -
切面(Aspect)
是通知和切点的结合。
切面获取请求信息
如果要获取 request 或者 response
@GetMapping(value = "")public String center() { ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); HttpServletRequest request = servletRequestAttributes.getRequest(); HttpServletResponse response = servletRequestAttributes.getResponse(); //...}
转载地址:https://lawsssscat.blog.csdn.net/article/details/104753149 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年05月03日 00时45分52秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
tf input layer
2019-04-30
tf model create
2019-04-30
tf dense layer两种创建方式的对比和numpy实现
2019-04-30
tf initializer
2019-04-30
tf 从RNN到BERT
2019-04-30
tf keras SimpleRNN源码解析
2019-04-30
tf keras Dense源码解析
2019-04-30
tf rnn输入输出的维度和权重的维度
2019-04-30
检验是否服从同一分布
2019-04-30
tf callbacks
2019-04-30
keras、tf、numpy实现logloss对比
2019-04-30
Ubuntu20.04安装微信
2019-04-30
Restful风格的使用
2019-04-30
Swagger基础入门整合SpringBoot
2019-04-30
MyBatisPlus简单入门(SpringBoot)
2019-04-30
攻防世界web进阶区NewsCenter详解
2019-04-30
攻防世界web进阶PHP2详解
2019-04-30
如何解决词达人问题(新)
2019-04-30
攻防世界web进阶区surpersqli详解
2019-04-30
攻防世界web进阶区easytornado详解
2019-04-30