我在Spring Component接口中遇到了这个方法签名。
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Indexed
public @interface Component
{
String value() default "";
}
方法签名
String value() default "";
是什么意思?为了我们的编码目的,我们应该如何以及何时定义这样的语法?
最佳答案
这不是方法签名。这意味着您可以将String作为参数传递给Component注释,如下所示:
@Component(value = "value")
如果您未指定自己的值,则将使用默认值“”。
如果是这样的:
String value(); // without the default
值将是必填参数。试图像这样使用组件:
@Component()
由于您未提供值,因此将导致Exception。
编辑:何时使用。
如果您对该语法或一般注释不了解太多,则不应使用它们。关于使用注释可以完成的所有事情,尤其是定制注释,也可以不使用注释来完成。
假设您要创建一个注释来验证字段的值。
我将使用比利时邮政编码的示例。它们都是4位数字,介于1000和9999之间。
@Target( {ElementType.FIELD})
@Retention( RetentionPolicy.RUNTIME)
@Constraint( validatedBy = ValidatePostalCodeImpl.class)
public @interface ValidatePostalCode{
String message() default "You have entered an invalid postal code";
Class<?>[] groups() default {}; // needed for the validation
Class<? extends Payload>[] payload() default{}; // needed for the validation
int maxValue() default 9999; // so, by default, this will validate based
int minValue() default 1000; // on these values, but you will be able to
// override these
}
/ *验证实现* /
public class ValidatePostalCodeImpl implements ConstraintValidator<ValidatePostalCode, Integer> {
int upperValue;
int lowerValue;
@Override
public void initialize(ValidatePostalCode validate) {
this.upperValue = validate.maxValue(); // here you call them as if they indeed were regular methods
this.lowerValue = validate.minValue();
}
@Override
public boolean isValid(Integer integer, ConstraintValidatorContext context) {
return integer >= lowerValue && integer <= upperValue;
}
}
/ *用法* /
@Entity
@Table(name = "addresses")
public class Addresses {
// home address -> In Belgium, so has to be between the default values:
@ValidatePostalCode
Integer belgianPostalCode;
// vacation home in another country, let's say the PC's there are between
// 12000 and 50000
@ValidatePostalCode(minValue = 12000, maxValue = 50000)
Integer foreignPostalCode;
}
当然,这是一个非常有限的示例,但这应该可以使您有所了解。