SpringBoot AOP 理解和用途
背景:开发软件时核心流程是业务的层级 从上到下 而其中编写业务的同时我们在代码中又加入了日志记录、异常处理、事务处理、权限等一些与业务毫不相关的操作。
基于以上场景 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 理解和用途相关推荐
- Springboot AOP切面
文章目录 SpringBoot Aop 切面(Aop) 一.什么是切面 二.切面的用途 三.AOP切面常用注解 四.详细内容 1.切面(Aspect) 2.连接点(Joinpoint) 3.通知(Ad ...
- 如何使用SpringBoot AOP 记录操作日志、异常日志?
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:咫尺的梦想_w cnblogs.com/wm-dv/ ...
- springboot aop + logback + 统一异常处理 打印日志
springboot aop + logback + 统一异常处理 打印日志 参考文章: (1)springboot aop + logback + 统一异常处理 打印日志 (2)https://ww ...
- SpringBoot+AOP实现多数据源动态切换
SpringBoot+AOP实现多数据源动态切换 背景 设计总体思路 步骤 背景 系统后端需要访问多个数据库,现有的数据库连接配置写入配置文件中.后端需要从一个数据库的配置表里动态的读取其它mysql ...
- SpringBoot AOP完全讲解二:统一处理请求日志
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/80669451 本文出自[赵彦军的博客] 前言 不了解 AOP 概念的同学,请先看 ...
- Spring-Boot + AOP实现多数据源动态切换
2019独角兽企业重金招聘Python工程师标准>>> 最近在做保证金余额查询优化,在项目启动时候需要把余额全量加载到本地缓存,因为需要全量查询所有骑手的保证金余额,为了不影响主数据 ...
- SpringBoot + AOP 统一处理日志
Springboot + AOP 统一处理日志.然后系统日志持久化到文件保存起来,当程序方便发生问题的时候,能够快速.准确的定位到问题的所在.SpringBoot + Log4j 每天输出一个日志文件 ...
- SpringBoot+AOP构建多数据源的切换实践
针对微服务架构中常用的设计模块,通常我们都会需要使用到druid作为我们的数据连接池,当架构发生扩展的时候 ,通常面对的数据存储服务器也会渐渐增加,从原本的单库架构逐渐扩展为复杂的多库架构. 当在业务 ...
- springboot+aop+自定义注解,打造通用的全局异常处理和参数校验切面(通用版)
springboot+aop+自定义注解,打造通用的全局异常处理和参数校验切面(通用版) 参考文章: (1)springboot+aop+自定义注解,打造通用的全局异常处理和参数校验切面(通用版) ( ...
最新文章
- JMS规范、ActiveMQ Broker和ActiveMQ传输协议
- mvc3 之三 符号列表
- Python----Requests库基本使用
- (微信公众号开发《一》OAuth2.0网页授权认证获取用户的详细信息,实现自动登陆)http://blog.csdn.net/liaohaojian/article/details/70175835
- shiro的会话管理:应用场景分析
- Linux-Vim使用技巧
- linux 将远程mysql复制,在线备份MySQL及远程copy到远程备份服务器shell脚本
- 在win10系统中安装Visual C++ 6.0的具体方法
- python导入模块有几种方式、各有什么特点_Python导入模块的几种姿势
- 外网DNS系统外网访问及邮件系统外网域名访问问题
- shapenet各类数据(转载)
- ASP.NET MVC 企业级实战 —— 创建用户权限管理范例程序(三)
- 《Maya 2009高手之路》-115网盘下载
- cesium加载entity图片缩放_Linux 下最棒的 11 个图片查看器 | Linux 中国
- 大话spring~spring那些事
- 问题描述-缺少关键字KeyError Traceback (most recent call last) <ipython-input
- 协议僵化 or 协议僵化
- 修改php-fpm监听端口,如何修改php fpm监听端口
- 清华出品:最易懂的AI芯片报告!人才技术趋势都在这里
- 我画了近百张图来理解红黑树
热门文章
- FaceWarehouse: a 3D Facial Expression Database for Visual Computing
- mybatis oracle生成注释,MyBatis Generator生成Oracle数据库对应实体类时无法获取注释问题...
- 图像语义分割 —利用Deeplab v3+训练VOC2012数据集
- tranmac不能识别_U盘插入苹果mac系统不能识别的解决方法
- 台式电脑cpu排行榜_微星新款游戏台式电脑亮相 配备英特尔第十代CPU
- mysql前179天_做up主179天的经历
- R_地图上的迷你直方图
- oracle 11g Flashback Data Archive(闪回数据归档)
- Android基站定位——单基站定位(二)
- 爱立信卫翰思:已囊括拉美一半以上…