当前位置: 首页 > news >正文

Springboot-aop的使用

aop:面向切面编程,可以看作是面向对象的补充
举例
在这里插入图片描述

1.依赖

    <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.1</version><relativePath/> <!-- lookup parent from repository --></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--引入AOP依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.28</version></dependency></dependencies>

2.使用

1.自定义注解

/*** @author wyr* @version 1.0*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SysLog {/*** 描述** @return {String}*/String value() default "";
}

2.切面类

@Slf4j
@Aspect
@Component
public class SysLogAspect {//定义切点 值为注解的全路径 拦截所有使用了拦截SysLog注解的方法@Pointcut("@annotation(com.example.demo.annotation.SysLog)")public void sysLogAspect() {}@Around(value="sysLogAspect()") //直接value="@annotation(com.example.demo.annotation.SysLog)"也可以public Object around(ProceedingJoinPoint point){Object proceed = null;try {//使用注解的方法执行之前 相等于 @before//获取类名String className = point.getTarget().getClass().getName();//获取执行的方法名String methodName = point.getSignature().getName();//获取参数Object[] args = point.getArgs();//获取方法上注解的值MethodSignature methodSignature = (MethodSignature)point.getSignature();String annotationVal= methodSignature.getMethod().getAnnotation(SysLog.class).value();log.info("[类名]:{},[方法]:{},[参数]:{},[操作]:{}", className, methodName, JSON.toJSONString(args),annotationVal);//相等于放行 如果直接return 则不执行使用了该注解对应的方法System.out.println("方法执行之前");proceed = point.proceed();System.out.println("方法执行之后");//使用注解的方法之后System.out.println("方法的返回值是:"+proceed);} catch (Throwable e) {throw  new RuntimeException(e.getMessage());}return proceed;}}

3.使用

@RestController
public class UserController {@GetMapping("/test/{name}")@SysLog("操作是获取名称")public String test(@PathVariable("name") String name){System.out.println("方法开始执行");return "我是返回值";}
}
http://www.lryc.cn/news/230819.html

相关文章:

  • 数列计算
  • 阿里云全球故障凸显“云集中”风险
  • 【2015年数据结构真题】
  • vxe表格行拖拽
  • Linux之基本指令操作
  • 海康设备、LiveNVR等通过GB35114国密协议对接到LiveGBS GB28181/GB35114平台的详细操作说明
  • BUUCTF 面具下的flag 1
  • ArcGIS实现矢量区域内所有要素的统计计算
  • 3.4-初识Container
  • 壹基金爱泽瑞金 安全家园物料配送忙
  • arcgis--二维建筑面的三维显示设置
  • Maven 插件统一修改聚合工程项目版本号
  • 主从复制和读写分离
  • Redis模块的高级使用方式
  • Failed to restart network.service: Unit network.service not found.
  • wiki.js一个开源知识库系统
  • 关于Java抽象类和接口的总结和一点个人的看法
  • vue中ref的用法
  • 【华为OD题库-012】模拟消息队列-Java
  • Android修行手册 - 阴影效果的几种实现以及一些特别注意点
  • 【星海出品】SDN neutron (五) openvswitch
  • springboot整合vue2实现简单的新增删除,整合ECharts实现图表渲染
  • <蓝桥杯软件赛>零基础备赛20周--第5周--杂题-2
  • 数据结构哈希表(散列)Hash,手写实现(图文推导)
  • 【嵌入式设计】Main Memory:SPM 便签存储器 | 缓存锁定 | 读取 DRAM 内存 | DREM 猝发(Brust)
  • dameng数据库数据id decimal类型,精度丢失
  • python图神经网络,注意力机制、Transformer模型、目标检测算法、强化学习等
  • 安装包 amd,amd64, arm,arm64 都有什么区别
  • Ansible 企业实战详解
  • 云贝教育 |【技术文章】pg缓存插件介绍