大家对注解应该已经不会陌生了,但是往往在开发中已有的注解满足不了我们的业务需求时,就需要我们自定义注解来完成我们的工作;
从注解使用位置可以分为 属性、方法和类 下面就分别从这两个方面提供一些例子,来分析一下如何自定义注解:
一、属性注解
一般在实体类中使用的字段注解有:@NotNull 、 @Range(min = 20 , max = 99) 等都可以对实体类的字段值进行验证,举个例子:如果我们有需求传入的字段信息需要是一个集合中的元素,这时就没有注解可以满足了、这里我们需要自定义注解;
1、定义一个 @CheckField 注解,通过 @interface声明一个注解:
package com.dongl.utils.annotation;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @author D-L
* @date 2020-08-24
*
* @Constraint 通过使用validatedBy来指定与注解关联的验证器
*
* @Retention 用来说明该注解类的生命周期。
*
* RetentionPolicy.SOURCE: 注解只保留在源文件中
* RetentionPolicy.CLASS : 注解保留在class文件中,在加载到JVM虚拟机时丢弃
* RetentionPolicy.RUNTIME: 注解保留在程序运行期间,此时可以通过反射获得定义在某个类上的所有注解。
*/
@Target({ ElementType.FIELD}) //只允许用在类的字段上
@Retention(RetentionPolicy.RUNTIME) //注解保留在程序运行期间,此时可以通过反射获得定义在某个类上的所有注解
@Constraint(validatedBy = VerificationField.class)
public @interface CheckField {
/**
* 合法的参数值
* */
String[] fieldValues();
/**
* 提示信息
* */
String message() default "参数不为指定值";
Class[] groups() default {};
Class[] groups() default {};
Class |