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;
                }
            }
        }
    }
}

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

Java中,形参是在方法声明中定义的变量。它们用于接收方法调用时传递的实际参数值,并在方法体内使用。以下是Java形参使用方法: 1. 形参的声明:在方法的括号内部,指定形参的类型和名称。例如,`public void printName(String name)`中的`name`就是一个形参,类型为`String`。 2. 形参的传递:当调用方法时,需要传递实际参数值给形参。例如,`printName("John")`中的"John"就是实际参数值,它会被传递给`name`形参。 3. 形参使用:在方法体内部,可以像使用普通变量一样使用形参。可以将其作为方法体内的计算、判断、赋值等操作的操作数或操作对象。 4. 形参的作用域:形参只在方法体内部有效,超出方法体范围后就无法访问。这意味着形参的作用域仅限于该方法。 5. 形参的数量和类型:方法可以有零个或多个形参,并且每个形参都必须具有唯一的名称。此外,形参还可以具有不同的数据类型,根据实际需求进行定义。 例如,下面是一个使用形参的示例方法: ```java public void printName(String name) { System.out.println("Hello, " + name + "!"); } ``` 在上述方法中,`printName`方法接受一个`String`类型的形参`name`,并在方法体内使用它来打印问候语。当调用该方法时,需要传递一个实际的字符串参数值,例如`printName("John")`将打印出"Hello, John!"。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值