1.场景
实现aop编程,在方法上加上自定义的注解,就可以切面运行对应方法,实现在被加注解的方法调用的前后 都运行指定的方法,比如权限验证。
2.添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2.编写注解
/**
* @author houyong
* @date 2022/3/14 11:59
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Validator {
}
3.切面方法
/**
* @author houyong
* @date 2022/3/14 12:03
*/
@Aspect
@Component
public class Interceptor {
@Autowired
SysLicenseChecker sysLicenseChecker;
//切点
@Pointcut("@annotation(Validator) || @within(Validator)")
public void cut() {}
//前置
@Before("cut()")
public void beforePointcut(JoinPoint joinPoint) throws Exception {
sysLicenseChecker.checkLicenseUserNum();
}
// //后置
// @After("pointCut()")
// public void afterPointcut(JoinPoint joinPoint) {}
//
// //环绕
// @Around("pointCut()")
// public void aroundPointcut(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {proceedingJoinPoint.proceed();}
//
// //返回之后
// @AfterReturning("pointCut()")
// public void afterReturningPointcut(JoinPoint joinPoint) {}
//
// //报错时
// @AfterThrowing("pointCut()")
// public void afterThrowingPointcut(JoinPoint joinPoint) {}
}
这里需要着重注意,如果你有arround环绕切面,一定要proceedingJoinPoint.proceed,要不然执行不到方法体里面去。
4.测试
@Validator
public Result loginPassword() {
}