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

Java 方法签名是什么意思?字符串值()默认值&“;;,java,spring-boot,syntax,annotations,Java,Spring Boot,Syntax,Annotations,我在Spring组件接口中遇到了这个方法签名 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Indexed public @interface Component { String value() default ""; } 什么是方法签名String value()默认值“”意味着什么? 我们应该如何以及何时为编码目的定义这样的语法?这不是方法签名。这意味着您可以将字符串作为参

我在Spring组件接口中遇到了这个方法签名

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Indexed
public @interface Component 
{
   String value() default "";
}
什么是方法签名
String value()默认值“”意味着什么?

我们应该如何以及何时为编码目的定义这样的语法?

这不是方法签名。这意味着您可以将字符串作为参数传递给组件注释,如下所示:

@Component(value = "value")
String value(); // without the default
@Component()
如果未自行指定值,将使用默认值“”

如果是这样的话:

@Component(value = "value")
String value(); // without the default
@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
}

当然,这是一个非常有限的示例,但它应该会让您了解。

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

@Component(value = "myValue")
或以速记形式:

@Component("myValue")

如果不指定
,它将默认为
,这是由
默认值
关键字定义的。

这是直截了当的。这是Spring组件名。如果用户未提供名称,则默认值为“”。它主要用于命名bean。例如,Animal类有2个实例,因此我无法直接自动关联它们,因此我需要命名它们,然后使用命名bean进行自动关联。@SagarGandhi因此,如果我的理解正确,您指的是使用限定符标记,然后使用限定名值自动关联实例。例如,我有两个实例Tiger和Lion,我在组件级别使用限定符(“Tiger”)和(“Lion”),然后我可以通过提供它们的限定名称(如Lion和Tiger)来自动关联它们。我说的对吗?对。基本上,你可以给一个实例命名。谢谢@Stultuske的回答。然而,我的第二个问题仍然存在。。在我的编码中应该使用上述语法的场景是什么?你能解释一下吗?我会在我的回答中加上一个例子这将非常有帮助…非常感谢你的时间谢谢你@Stultuske的例子。我现在对这个问题100%清楚了。谢谢你抽出时间。