Java自定义注解进行参数校验

本文介绍了Java自定义注解的用途,如登陆、权限拦截、日志处理,并详细讲解了如何创建自定义注解,包括注解方法的设定、默认值以及元注解的使用。同时,阐述了Java的内置注解如@Override、@Deprecated和@SuppressWarnings。通过反射机制解析注解,并给出了一例应用在手机号验证中的项目实例,通过自定义校验规则进行参数校验。
摘要由CSDN通过智能技术生成

Java自定义注解

简介

Java自定义注解是通过运行时靠反射获取注解。

​ 常用于:登陆、权限拦截、日志处理,例如我们要获取某个方法的调用日志,可以通过AOP(动态代理机制)给方法添加切面,通过反射来获取方法包含的注解,如果包含日志注解,就进行日志记录。

​ 注解相当于是一种嵌入在程序中的元数据,可以使用注解解析工具或编译器对其进行解析,也可以指定注解在编译期或运行期有效。


创建自定义注解

创建自定义注解与编写接口很相似,除了它的接口关键字前有个@符号,我们可以在注解中定义方法

package com.tao.annotations;
 
import java.lang.annotation.*;
 
@Documented
@Target(ElementType.METHOD)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface MethodInfo{
   
    String author() default "Pankaj";
    String date();
    int revision() default 1;
    String comments();
}
  • 注解方法,没有参数
  • 可设定默认值
  • 返回类型仅限于原始类型:字符串、枚举、注解,或以上构成的数组
  • 可包含四种【元注解】与之绑定
    • Documented – 表示使用该注解的元素应被javadoc或类似工具文档化
    • **Target --**表示支持注解的元素种类:可选【TYPE, METHOD, CONSTRUCTOR, FIELD】,不写则全部支持
    • **Inherited --**注解类型会被自动继承
    • **Retention --**接收RetentionPolicy参数,可选【SOURCE, CLASS, RUNTIME】,表示注解类型保留时间的长短
Java内置注解

Java提供3种内置注解 : @Override、@Deprecated、@SuppressWarnings

  • @Override : 表示正在覆盖SuperType的方法,该方法来自父类或接口

  • @Deprecated :表示该方法已被弃用,应在javadoc中提供信息,说明弃用原因以及替代方法

  • @SuppressWarnings:这个注解仅仅是告知编译器,忽略它们产生的特殊警告

    示例如下:

    package com.tao.annotations;
     
    import java.io.FileNotFoundException;
    import java.util.*;
     
    public class AnnotationExample {
         
     
        public static void main(String[] args) {
         
        }
     
        @Override
        @MethodInfo(author = "Pankaj", comments = "Main method"
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的自定义注解是一种给代码提供额外信息的方式,可以在运行时通过反射机制获取注解的信息。通过自定义注解,我们可以实现参数校验,提高代码的健壮性和可维护性。 首先,我们需要定义一个注解类,用于定义参数校验的规则。比如,我们可以定义一个注解叫@ParamCheck,用于对方法的参数进行校验。 ```java @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface ParamCheck { String value(); } ``` 接着,在需要进行参数校验的方法上使用@ParamCheck注解,并给注解传入校验规则的表达式。比如,我们可以给一个名为checkNumber的方法的参数添加校验注解。 ```java public void checkNumber(@ParamCheck("number > 0") int number) { // ... } ``` 然后,在方法内部,通过反射机制获取参数的注解信息,并根据注解中定义的校验规则对参数进行校验。 ```java public void checkNumber(int number) { Parameter parameter = ...; // 获取方法的参数信息 ParamCheck paramCheckAnnotation = parameter.getAnnotation(ParamCheck.class); if (paramCheckAnnotation != null) { String expression = paramCheckAnnotation.value(); // 根据expression对number进行校验 // ... } } ``` 最后,我们可以在调用checkNumber方法时传入一个不满足校验规则的参数,比如-10,当方法内部进行参数校验时,可以捕获到校验失败的情况,并进行相应处理。 ```java checkNumber(-10); // 参数校验失败,抛出异常或者进行其他处理 ``` 通过自定义注解实现参数校验可以方便地对代码进行统一的校验规则管理,提高代码的可维护性和可读性。同时,由于注解是在运行时通过反射获取,可以对代码进行动态改变和扩展,使得我们可以更加灵活地进行参数校验
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值