springboot中使用aop技术
程序员文章站
2022-05-29 09:20:39
aop是面向切面编程的意思,它可以需要先选择一些切入点,然后对这些切入点进行拦截,注入统一的代码逻辑,这也是解耦的一种方式,也是为了避免重复的代码,让开发人员把关注点放在业务上。 引用包 添加切入点 测试 当我们访问controller下的接口下,在控制台中将输出方法执行前和执行后的结果 感想 事实 ......
aop是面向切面编程的意思,它可以需要先选择一些切入点,然后对这些切入点进行拦截,注入统一的代码逻辑,这也是解耦的一种方式,也是为了避免重复的代码,让开发人员把关注点放在业务上。
引用包
'org.springframework.boot:spring-boot-starter-aop'
添加切入点
/** * 基于com.lind.basic.controller包下的方法进行拦截. */ @aspect @component public class aopprintconstcontroller { private static final logger logger = loggerfactory.getlogger(aopprintconstcontroller.class); /** * 横切点,哪些方法需要被横切. */ @pointcut(value = "execution(public * com.lind.basic.controller..*.*(..))") public void cutoffpoint() { } /** * @param joinpoint 具体的方法之前执行. */ @before("cutoffpoint()") public void dobefore(joinpoint joinpoint) throws throwable { logger.info("cutoffpoint.before..."); servletrequestattributes requestattributes = (servletrequestattributes) requestcontextholder.getrequestattributes(); httpservletrequest request = requestattributes.getrequest(); string requesturi = request.getrequesturi(); string remoteaddr = request.getremoteaddr(); //这个方法取客户端ip"不够好" string requestmethod = request.getmethod(); string declaringtypename = joinpoint.getsignature().getdeclaringtypename(); string methodname = joinpoint.getsignature().getname(); object[] args = joinpoint.getargs(); logger.info("请求url=" + requesturi + ",客户端ip=" + remoteaddr + ",请求方式=" + requestmethod + ",请求的类名=" + declaringtypename + ",方法名=" + methodname + ",入参=" + args); } /** * 解用于获取方法的返回值. * * @param obj 返回值 */ @afterreturning(returning = "obj", pointcut = "cutoffpoint()") public void dobefore(object obj) throws throwable { logger.info("response : " + obj); } }
测试
当我们访问controller下的接口下,在控制台中将输出方法执行前和执行后的结果
com.lind.basic.aopprintconstcontroller : 请求url=/hello/1,客户端ip=0:0:0:0:0:0:0:1,请求方式=get,请求的类名=... com.lind.basic.controller.h com.lind.basic.aopprintconstcontroller : response : <200 ok,com.lind.basic.entity.token@249f92d9,{}>
感想
事实上,springboot真的是一个强大的脚手架,它帮助我们把很多依赖都结合了,像今天说的aop,事实上springboot帮我们把以下包都结合在一起了,让开发人员引用时更方便。
springboot-aop集成了
- spring-aop,
- aspectjrt,
- spectjweaver
推荐阅读
-
SpringBoot使用AOP+注解实现简单的权限验证的方法
-
Springboot 中AOP的使用
-
springboot中使用aop技术
-
websocket在springboot+vue中的使用
-
浅析Linux中的零拷贝技术的使用
-
SpringBoot 多线程 中 @Async 和 ThreadPoolTaskExecutor 的使用
-
SpringBoot中@Value注解默认值使用及效果测试
-
使用.net core中的类DispatchProxy实现AOP
-
springboot启动失败:java: -source 1.5中不支持默认方法(请使用-source 8或更高版本以启用默认方法)
-
Springboot中MyBatisplus使用IPage和Page分页