春如何自定义注解

这篇文章将为大家详细讲解有关Spring如何自定义注解,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

字段注解

字段注解一般是用于校验字段是否满足要求,hibernate-validate依赖就提供了很多校验注解 ,如@NotNull、@Range等,但是这些注解并不是能够满足所有业务场景的。

比如我们希望传入的参数在指定的String集合中,那么已有的注解就不能满足需求了,需要自己实现。

自定义注解

定义一个@Check注解,通过@interface声明一个注解

@Target({ ElementType.FIELD}) //只允许用在类的字段上  @Retention(RetentionPolicy.RUNTIME) //注解保留在程序运行期间,此时可以通过反射获得定义在某个类上的所有注解  @Constraint(validatedBy = ParamConstraintValidated.class)  public @interface Check {      /**       * 合法的参数值       * */      String[] paramValues();      /**       * 提示信息       * */      String message() default "参数不为指定值";      Class<?>[] groups() default {};      Class<? extends Payload>[] payload() default {};  }

@Target 定义注解的使用位置,用来说明该注解可以被声明在那些元素之前。

ElementType.TYPE:说明该注解只能被声明在一个类前。

ElementType.FIELD:说明该注解只能被声明在一个类的字段前。

ElementType.METHOD:说明该注解只能被声明在一个类的方法前。

ElementType.PARAMETER:说明该注解只能被声明在一个方法参数前。

ElementType.CONSTRUCTOR:说明该注解只能声明在一个类的构造方法前。

ElementType.LOCAL_VARIABLE:说明该注解只能声明在一个局部变量前。

ElementType.ANNOTATION_TYPE:说明该注解只能声明在一个注解类型前。

ElementType.包:说明该注解只能声明在一个包名前

@Constraint通过使用validatedBy来指定与注解关联的验证器

@Retention用来说明该注解类的生命周期。

RetentionPolicy。来源:注解只保留在源文件中

RetentionPolicy。类:注解保留在类文件中,在加载到JVM虚拟机时丢弃

RetentionPolicy。null

春如何自定义注解