springboot切面编程范例
相较与古老的ssm项目,springboot项目的切面编程几乎不用配置。开箱即用。
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
注解
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SysLogger {
String action() default "";
String content() default "";
}
切面类
@Aspect
@Component
public class MyNewAspect {
//整个包下的所有
@Pointcut("execution(* com.***.***.controller.*.*(..))")
public void point(){}
//基于注解的切点
//@annotation(com.***.***.annotation.SysLogger)
@Pointcut("@annotation(com.***.***.annotation.SysLogger)")
public void point0(){}
// 期望在某个方法执行前做一些处理,叫做前置通知
@Before(value="point()")
public void begin(JoinPoint joinPoint){
String name =joinPoint.getSignature().getName();
System.out.println(name + "方法开始执行...");
// 添加处理代码
// ...
// 以上是处理代码
}
// 期望在某个方法执行后做一些处理,叫做后置最终通知
@After(value = "point()")
public void end(JoinPoint joinPoint){
String name = joinPoint.getSignature().getName();
System.out.println(name + "方法执行结束...");
// 添加处理代码
// ...
// 以上是处理代码
}
// 期望在某个方法返回时做一些处理,叫做后置返回通知
@AfterReturning(value = "point()" , returning = "result")
public void afterReturning(JoinPoint joinPoint, Object result){
String name = joinPoint.getSignature().getName();
System.out.println(name + "方法返回值为:" + result);
// 添加处理代码
// ...
// 以上是处理代码
}
// 期望在某个方法抛出异常时做一些处理,叫做后置异常通知
@AfterThrowing(value = "point()" , throwing = "e")
public void afterThrowing(JoinPoint joinPoint, Exception e){
String name = joinPoint.getSignature().getName();
System.out.println(name + "方法抛出异常:" + e.getClass().getName());
// 添加处理代码
// ...
// 以上是处理代码
}
// 期望在某个方法执行时做一些处理,叫做环绕通知
// 这个通知功能强大且比较灵活。
@Around("point0()")
public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
// 添加处理代码
// ...
// 以上是处理代码
return proceedingJoinPoint.proceed();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」