标签:style blog io ar color 使用 sp java on
元注解,是定义注解的时候的使用的注解。定义注解使用@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框架扫描注解的时候就知道用这个实现类去做校验。
标签:style blog io ar color 使用 sp java on
原文地址:http://www.cnblogs.com/no5element/p/4153018.html