背景:开发软件时核心流程是业务的层级 从上到下  而其中编写业务的同时我们在代码中又加入了日志记录、异常处理、事务处理、权限等一些与业务毫不相关的操作。

基于以上场景 Aop应运而生 ,它主要解决与业务不相关的操作 将其单独分离 从而实现解耦的目的

Aop 实现的步骤:

第一步  定义一个且面类@Aspect

第二步 定义一个切点方法@PointCut   (

@Pointcut("execution(public * com.didispace.web..*.*(..))")    通过 @Pointcut 定义的切入点为 com.didispace.web 包下的所有函数(对web层所有请求处理做切入点)

第三步 基于该切点 业务处理前做如何操作@Before   业务处理之后做如何操作@After

实例:  详情查看http://www.tuicool.com/articles/3qY7vqj

@Aspect
@Component
public class WebLogAspect { private Logger logger = Logger.getLogger(getClass()); @Pointcut("execution(public * com.didispace.web..*.*(..))") public void webLog(){} @Before("webLog()") public void doBefore(JoinPoint joinPoint) throws Throwable { // 接收到请求,记录请求内容 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); // 记录下请求内容 logger.info("URL : " + request.getRequestURL().toString()); logger.info("HTTP_METHOD : " + request.getMethod()); logger.info("IP : " + request.getRemoteAddr()); logger.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName()); logger.info("ARGS : " + Arrays.toString(joinPoint.getArgs())); } @AfterReturning(returning = "ret", pointcut = "webLog()") public void doAfterReturning(Object ret) throws Throwable { // 处理完请求,返回内容 logger.info("RESPONSE : " + ret); } } 

可以看上面的例子,通过 @Pointcut 定义的切入点为 com.didispace.web 包下的所有函数(对web层所有请求处理做切入点),然后通过 @Before 实现,对请求内容的日志记录(本文只是说明过程,可以根据需要调整内容),最后通过 @AfterReturning 记录请求返回的对象。

通过运行程序并访问: http://localhost:8080/hello?name=didi ,可以获得下面的日志输出

2016-05-19 13:42:13,156 INFO WebLogAspect:41 - URL : http://localhost:8080/hello 2016-05-19 13:42:13,156 INFO WebLogAspect:42 - HTTP_METHOD : http://localhost:8080/hello 2016-05-19 13:42:13,157 INFO WebLogAspect:43 - IP : 0:0:0:0:0:0:0:1 2016-05-19 13:42:13,160 INFO WebLogAspect:44 - CLASS_METHOD : com.didispace.web.HelloController.hello 2016-05-19 13:42:13,160 INFO WebLogAspect:45 - ARGS : [didi] 2016-05-19 13:42:13,170 INFO WebLogAspect:52 - RESPONSE:Hello didi

转载于:https://www.cnblogs.com/liujinfang/p/6148962.html

SpringBoot AOP 理解和用途相关推荐

  1. Springboot AOP切面

    文章目录 SpringBoot Aop 切面(Aop) 一.什么是切面 二.切面的用途 三.AOP切面常用注解 四.详细内容 1.切面(Aspect) 2.连接点(Joinpoint) 3.通知(Ad ...

  2. 如何使用SpringBoot AOP 记录操作日志、异常日志?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:咫尺的梦想_w cnblogs.com/wm-dv/ ...

  3. springboot aop + logback + 统一异常处理 打印日志

    springboot aop + logback + 统一异常处理 打印日志 参考文章: (1)springboot aop + logback + 统一异常处理 打印日志 (2)https://ww ...

  4. SpringBoot+AOP实现多数据源动态切换

    SpringBoot+AOP实现多数据源动态切换 背景 设计总体思路 步骤 背景 系统后端需要访问多个数据库,现有的数据库连接配置写入配置文件中.后端需要从一个数据库的配置表里动态的读取其它mysql ...

  5. SpringBoot AOP完全讲解二:统一处理请求日志

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/80669451 本文出自[赵彦军的博客] 前言 不了解 AOP 概念的同学,请先看 ...

  6. Spring-Boot + AOP实现多数据源动态切换

    2019独角兽企业重金招聘Python工程师标准>>> 最近在做保证金余额查询优化,在项目启动时候需要把余额全量加载到本地缓存,因为需要全量查询所有骑手的保证金余额,为了不影响主数据 ...

  7. SpringBoot + AOP 统一处理日志

    Springboot + AOP 统一处理日志.然后系统日志持久化到文件保存起来,当程序方便发生问题的时候,能够快速.准确的定位到问题的所在.SpringBoot + Log4j 每天输出一个日志文件 ...

  8. SpringBoot+AOP构建多数据源的切换实践

    针对微服务架构中常用的设计模块,通常我们都会需要使用到druid作为我们的数据连接池,当架构发生扩展的时候 ,通常面对的数据存储服务器也会渐渐增加,从原本的单库架构逐渐扩展为复杂的多库架构. 当在业务 ...

  9. springboot+aop+自定义注解,打造通用的全局异常处理和参数校验切面(通用版)

    springboot+aop+自定义注解,打造通用的全局异常处理和参数校验切面(通用版) 参考文章: (1)springboot+aop+自定义注解,打造通用的全局异常处理和参数校验切面(通用版) ( ...

最新文章

  1. JMS规范、ActiveMQ Broker和ActiveMQ传输协议
  2. mvc3 之三 符号列表
  3. Python----Requests库基本使用
  4. (微信公众号开发《一》OAuth2.0网页授权认证获取用户的详细信息,实现自动登陆)http://blog.csdn.net/liaohaojian/article/details/70175835
  5. shiro的会话管理:应用场景分析
  6. Linux-Vim使用技巧
  7. linux 将远程mysql复制,在线备份MySQL及远程copy到远程备份服务器shell脚本
  8. 在win10系统中安装Visual C++ 6.0的具体方法
  9. python导入模块有几种方式、各有什么特点_Python导入模块的几种姿势
  10. 外网DNS系统外网访问及邮件系统外网域名访问问题
  11. shapenet各类数据(转载)
  12. ASP.NET MVC 企业级实战 —— 创建用户权限管理范例程序(三)
  13. 《Maya 2009高手之路》-115网盘下载
  14. cesium加载entity图片缩放_Linux 下最棒的 11 个图片查看器 | Linux 中国
  15. 大话spring~spring那些事
  16. 问题描述-缺少关键字KeyError Traceback (most recent call last) <ipython-input
  17. 协议僵化 or 协议僵化
  18. 修改php-fpm监听端口,如何修改php fpm监听端口
  19. 清华出品:最易懂的AI芯片报告!人才技术趋势都在这里
  20. 我画了近百张图来理解红黑树

热门文章

  1. FaceWarehouse: a 3D Facial Expression Database for Visual Computing
  2. mybatis oracle生成注释,MyBatis Generator生成Oracle数据库对应实体类时无法获取注释问题...
  3. 图像语义分割 —利用Deeplab v3+训练VOC2012数据集
  4. tranmac不能识别_U盘插入苹果mac系统不能识别的解决方法
  5. 台式电脑cpu排行榜_微星新款游戏台式电脑亮相 配备英特尔第十代CPU
  6. mysql前179天_做up主179天的经历
  7. R_地图上的迷你直方图
  8. oracle 11g Flashback Data Archive(闪回数据归档)
  9. Android基站定位——单基站定位(二)
  10. 爱立信卫翰思:已囊括拉美一半以上…