首页 > 代码库 > 元注解

元注解

元注解,是定义注解的时候的使用的注解。定义注解使用@interface

@Documented
标注@Documented的注解,在代码中使用后,如果对代码生成javadoc,注解信息也会加入到javadoc中。
java.lang.annotation.Documented

@Inherited
默认情况注解不可以继承,标注了@Inherited的注解,是可以随着类继承而继承的。
java.lang.annotation.Inherited

@Target({ })
约束注解应用的目标元素类型 ,ElementType枚举,可选值:ANNOTATION_TYPE CONSTRUCTOR  FIELD LOCAL_VARIABLE METHOD PACKAGE PARAMETER TYPE,
比如,如果定义为METHOD ,就只能用在方法签名前
java.lang.annotation.Target

@Retention()
约束注解应用的时机  RetentionPolicy枚举,可选值:CLASS  RUNTIME   SOURCE,
比如:RUNTIME,运行的时候就能通过反射找到,而CLASS虽然放到了class中,却不在运行期起作用,SOURCE,则在编译的时候被抛弃。

比如:
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })   @Retention(RUNTIME)   @Documented   @Constraint(validatedBy = {NotEmptyValidator.class})   public @interface NotEmpty {     String message() default "this string may be empty";     Class[] groups() default { };     Classextends Payload>[] payload() default {};   } 
class Test {    @NotEmpty     private String company; }

运行时通过Test类可以反射到这个NotEmpty注解,并且字段,方法名,构造函数等都可以用这个注解,并且生成javadoc的时候,也会带有这个注解的信息。

而如果继承Test类,就没有这个NotEnpty注解了,因为这个注解不可以继承。

@Constraint

是Bean Validation规范中带的元注解,可以用来指定实现的ConstraintValidator接口的类(如:NotEmptyValidator),这样validation框架扫描注解的时候就知道用这个实现类去做校验。

元注解