SpringBoot快速上手异常集中处理&AOP切面编程&(自用)
SpringBoot——错误集中处理
简介:简化复杂的判断,通过抛出异常集中处理。降低耦合性
基础操作
-
创建错误
-
捕获错误
@RestControllerAdvice public class ExceptionConfig { //捕获对应错误 @ExceptionHandler(TryException.class) public void tryException(TryException exception){ //对错误进行相应的处理 System.out.println(exception.getMessage()); } }
特点:
- 可以注入
- 捕获父类就可以捕获子类
SpringBoot——AOP切面
简介:对于请求有拦截器,对于方法有AOP。AOP切面编程,游离于主逻辑的操作,通过对方法的侵入做到对方法的执行前后、错误、整个执行流程进行增强、修改操作。
专有名词:
- Aspect:切面,专门定义AOP的一个类。【给一个范围建立城墙】
- Pointcut:切入点。【看守大门的士兵】
- weave:织入。【安排看守大门的士兵去大门看守】
- JointPoint:连接点。【被拦在大门的行人】
- Advice:通知,对切入点进行增强处理【对拦截的人进行一些检查处理】
- Before:前置增强
- After:后置增强
- AfterReturning:后置增强,带返回参数,遇到错误不执行
- AfterThrowing:后置异常增强
- Around:前后置增强
- 等
基础操作
-
导入对应依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
-
创建切面
@Aspect @Configuration public class AOPConfig { //切入点 @Pointcut("execution(* com.musir.problem.webLearn.controller.*.*(..))") public void pointCut(){} //前置 @Before("pointCut()") public void before(JoinPoint joinPoint){} //正常后置 @AfterReturning(value = "pointCut()",returning = "result") public void after(JoinPoint joinPoint,Object result){ } //错误后置 @AfterThrowing(value = "pointCut()",throwing = "exception") public void error(JoinPoint joinPoint,NullPointerException exception){} //后置 @After("pointCut()") public void end(JoinPoint joinPoint){} }
-
execution:匹配公式
- 作用:对方法进行匹配
- 格式:execution(返回类型 返回参数 包.方法(参数..))
- 返回类型和返回参数可以用 * 表示匹配任何类型
- 参数通过 .. 表示长度与类型任意
-
@Aspect:定义一个切面
-
@Pointcut:定义一个切入点
- 参数:匹配公式
-
@Before:前置增强
- 参数:匹配公式或切入点
-
@AfterReturning:正常后置
- 参数:
- value:匹配公式或切入点【必须在第一个】
- returning:绑定当前方法参数名称【当前AOP增强方法的返回值名称】
- 参数:
-
@AfterThrowing:错误后置
- 参数:
- value:匹配公式或切入点【必须在第一个】
- throwing:绑定当前错误参数名称【当前AOP增强方法的返回值名称】
- 参数:
-
@After:后置
- 参数:匹配公式或切入点
-
JoinPoint:连接电
-
常用方法:
joinPoint.getArgs(): 获取请求参数即数组 joinPoint.getSignature(): tostring(): 获取参数完整信息,如 string com.XX(String) getName(): 获取方法名 getDeclaringTypeName(): 获取完整的方法路径
-
-
特点:
- 可以通过@Autowired注入,然后进行操作
- 操作时抛出错误依然会被集中处理
- 拦截的地方为获取参数之后,所以通过@RequestParm赋默认值是可以注入的
高级操作
通过注解执行
@Pointcut(value = "@annotation(com.hanna.common.lang.TokenAop)")
public void pointCut(){}
//获取注解参数
@Before("pointCut && @annotation(abc)" , returning = "result")
public void test(TokenAop abc,Object result){}//注意注解的annotation括号内参数与方法的参数名称相同
本文作者:Ch1ee
本文链接:https://www.cnblogs.com/daimourentop/p/16335199.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了