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

Spring Boot面向切面加注解

一.项目pom.xml文件引入切面依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>

二.定义注解类

import java.lang.annotation.*;/*** @desc 错误日志注解* @author lss*/
@Target(ElementType.METHOD)   //应用于方法上面
@Retention(RetentionPolicy.RUNTIME)  //表示在运行时注解任可用
public @interface ErrorLog {/*** 日志报错类型 */public String type() default "";
}

三.定义切面类,实现方法拦截和异常处理逻辑

import com.qike.sys.annotation.ErrorLog;
import com.qike.sys.service.ErrorResponseService;
import lombok.RequiredArgsConstructor;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;@Aspect
@Component
@RequiredArgsConstructor
public class ErrorLogAspect {private final ErrorResponseService errorResponseService;//切点@Around("@annotation(errorLog)")public Object around(ProceedingJoinPoint joinPoint, ErrorLog errorLog) throws Throwable {// 在方法执行前做些事情System.out.println("Before method execution...");try {// 执行被拦截的方法Object result = joinPoint.proceed();// 在方法执行后做些事情System.out.println("After method execution...");return result;} catch (Exception e) {// 记录错误信息// 注解自定义属性获得值String type = errorLog.type;// 异常逻辑处理...System.out.println("Error occurred: " + e.getMessage());throw e;}}
}

四.在方法中使用

	@ErrorLog(type = "2")public void splitLogTable(){}

四.在拦截器中使用

@Slf4j
@Component
public class AppControllerInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {HandlerMethod handlerMethod = (HandlerMethod) handler;try {log.debug(request.getServletPath());// 不用登录的标识ErrorLog loginRestrict = handlerMethod.getMethodAnnotation(ErrorLog.class);// 未登录可以访问if (null != loginRestrict) {return true;}......return true;} catch (Exception e) {e.printStackTrace();return false;}}
http://www.lryc.cn/news/215159.html

相关文章:

  • uniapp小程序授权统一处理
  • 光学仿真|优化汽车内部照明体验
  • Spring XML使用CASE WHEN处理SELECT字段
  • 关于C#中使用多线程的讨论
  • 工程机械数字孪生可视化平台建设,推动大型装备智能化数字化转型升级
  • Linux 网络流量监控利器 iftop命令详解及实战
  • protected by SourceGuardian and requires a SourceGuardian loader ‘ixed.8解决方案
  • KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(14)
  • 2023-macOS下安装anaconda,终端自动会出现(base)字样,如何取消
  • Nginx搭载负载均衡及前端项目部署
  • 深度学习——炼丹
  • Matlab中的app设计
  • 曾经遇到过的无法解释的问题
  • 基于uniapp与uview做一个按拼音首字母排序的通讯录页面
  • 网络工程师-入门基础课:华为HCIA认证课程介绍
  • 玻色量子成功研制光量子计算专用光纤恒温控制设备——“量晷”
  • 力扣:147. 对链表进行插入排序(Python3)
  • OpenCV4(C++)——形态学(腐蚀、膨胀)
  • C++设计模式_24_Visitor 访问器
  • el-tabel表格加个多选框
  • Go语言集成开发环境(IDE):GoLand 2023中文
  • opencv c++ canny 实现 以及与halcon canny的对比
  • 阿里云无影升级2.0 云电脑解决方案时代到来
  • 【案例展示】多物理场仿真软件介绍
  • k8s的RBAC中,clusterrole, rolebinding 是什么关系谁先谁后
  • myabtis流式查询
  • K8S的pod创建过程
  • java修仙传之海岛奇遇
  • 电子商务平台对接电商供应链,不得不说的开放平台电商API接口
  • 【JAVA学习笔记】 57 - 本章作业