示例
@Aspect
@Component
public class LogAspect {
@Before("@annotation(com.example.aop.Action)")
public void before(JoinPoint joinPoint) {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
Action action = method.getAnnotation(Action.class);
System.out.println("注解式拦截 " + action.name());
}
}
解释说明:
@Aspect 注解表示这是一个切面类
@Component 注解表示这是一个 Spring 组件,可以被自动扫描到
@Before 注解表示这是一个前置通知,在方法执行前执行
@annotation(com.example.aop.Action) 表示匹配带有 Action 注解的方法
JoinPoint 表示连接点,可以获取方法签名和参数等信息
MethodSignature 表示方法签名,可以获取方法的返回值类型和参数列表等信息
Method 表示方法,可以获取方法的注解等信息