方法签名是什么意思?字符串value()默认值“”;

时间:2019-01-21 07:15:45

标签: java spring-boot syntax annotations

我在Spring Component界面中遇到了这个方法签名。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Indexed
public @interface Component 
{
   String value() default "";
}

方法签名String value() default "";是什么意思? 为编码目的,我们应该如何以及何时定义这样的语法?

2 个答案:

答案 0 :(得分:4)

这不是方法签名。这意味着您可以将String作为参数传递给Component批注,如下所示:

@Component(value = "value")

如果您未指定自己的值,则将使用默认值“”。

如果是这样的话:

String value(); // without the default

值将是必填参数。尝试使用这样的组件:

@Component()

由于未提供值,因此将导致异常。

编辑:何时使用。

如果您对该语法或一般注释不了解太多,则不应使用它们。关于使用注释可以完成的所有事情,特别是定制注释,也可以不使用注释来完成。

假设您要创建一个注释以验证字段的值。 我将使用比利时邮政编码的示例。它们都是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;

}

当然,这是一个非常有限的示例,但这应该可以使您有所了解。

答案 1 :(得分:2)

@interface关键字用于定义注释。该注释具有一个名为value的属性,您可以明确指定该属性:

@Component(value = "myValue")

或以简写形式:

@Component("myValue")

如果您未指定value,它将默认为""(由default关键字定义。)