我们首先定义好我们的注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface PermissionCheck {
String value() default "";//default表示默认取值,可选项
String permission();
}
//这里说明一点,通过value函数传值时不需要说明传给哪个变量
//而其他函数则要说明需要说明,下面会有例子说明
一.传值
这里我定义的注解是作用在方法上的,定义切面内的方法,会在调用接口前或中或后的时间内执行,而取值也是在其中取值
@PermissionCheck(permission = "管理员")
@GetMapping("/getdata")
String insert(){
return "data";
}
若是在自定义注解里只定义了一个变量写法如下 @PermissionCheck(permission = "管理员")若是这个变量为value 则可以省略变量名@PermissionCheck("管理员")
如需传多个值,则只需要一一罗列即可@PermissionCheck(变量a= valuea,变量b=valueb,...)
二.取值
取值需要定义一个切面
@Aspect
@Component
@Slf4j
public class PermissionCheckAOP {
//这里是绑定自定义的注解
@Pointcut("@annotation(com.example.login.Annotation.PermissionCheck)")
public void permissionCheckAspect(){ }
@Before("permissionCheckAspect() && @annotation(permissionCheck)")
public void around(PermissionCheck permissionCheck){
// 拿到注解上的值,注解内的值可以通过注解名.变量名()而直接拿到
String permission = permissionCheck.permission();
}
}