java自定义形参注解(使用aop捕捉)

java自定义形参注解(使用aop捕捉)

提示:这里简述项目相关背景:

项目场景:在项目开发过程中,我们会使用大量注解,但是业务需求不同,对注解的需求就不同,需要我们自己自定义注解的场景有很多,在这里就教大家怎么实现自己的注解并解析


1、写注解

自定义注解主要就是包括有两部分,一个就是创建注解,另一个就是解析注解,先说创建注解,创建注解比较简单

注解的实质就是一个接口,只是所有注解都需要继承Annotation这个类,所以一样是通过创建class是同一个步骤

输入注解名之后,选择Annotation就创建了一个注解

然后注解里面可以自定义参数,可写可不写,根据个人需要 @Target这个注解就标识着你这个注解的使用地方,ElementType.PARAMETER就表示这个注解可以用在参数上(一个注解可以有多个用途)

注解已经创建完成


2、注解解析:

注解想要解析,就要先进行使用,我们先写一个test方法(两个形参,一个加注解,一个不加注解),如下图: 然后就到解析步骤,解析的话我这里使用aop进行辅助解析,因为像这种形参注解,是有可能在任意一个方法的参数上使用的,所以要使用aop进行横向切入的方法,对每一个方法进行拦截处理,代码如下:

@Aspect
@Component
public class NotNullAop {
          
   
    //这里controller在idea中会报红,因为在pc-common模块中没有controller这个包
    //但是把pc-common这个模块导入其他模块之后,因为其他模块中有controller,所以是可以正常运行的,
    //无须理会这个报红
    @Pointcut("execution(public * com.lb.precisioncoach.controller.*.*(..)))")
    public void validate(){
          
   }


    @Before("validate()")
    public void doBefore(JoinPoint joinPoint){
          
   

        //获取方法上的形参
        Object[] params = joinPoint.getArgs();
        if(params.length == 0){
          
   
            return;
        }
        //获取方法,此处可将signature强转为MethodSignature
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        Method method = signature.getMethod();
        //参数注解,1维是参数,2维是注解
        Annotation[][] annotations = method.getParameterAnnotations();
        for (int i = 0; i < annotations.length; i++) {
          
   
            Object param = params[i];
            Annotation[] paramAnn = annotations[i];
            //参数为空,直接下一个参数
            if(param == null || paramAnn.length == 0){
          
   
                continue;
            }
            for (Annotation annotation : paramAnn) {
          
   
                //这里判断当前注解是否为Test.class
                if(annotation.annotationType().equals(NotNull.class)){
          
   
                    System.out.println("是这个注解");
                    //校验该参数,验证一次退出该注解
                    //TODO 校验参数
                    break;
                }
            }
        }
    }
}

我们可以在比较了注解类型之后,对符合条件的注解进行校验。 完毕

经验分享 程序员 微信小程序 职场和发展