注解是可以重复添加到一个Bean属性上的,示例如下:
@Length(min = 1, max = 10)
@Length(min = 20, max = 30)
private String name;
如上,name
属性的长度会限制在两个范围之内[1, 10]
& [20, 30]
,也还有另外一种写法:
@Length.List({
@Length(min = 1, max = 10),
@Length(min = 20, max = 30)
})
private String name;
之所以可以这样定义,是因为在@Length
注解内定义了内部注解@List
,@Length
源码如下:
...
public @interface Length {
...
/**
* Defines several {@code @Length} annotations on the same element.
*/
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
public @interface List {
Length[] value();
}
}
以上两种写法,最终实现效果相同。