为什么这三个注解的调用是一样的呢?

Why is the call of this three annotations is the same?

我正在阅读 Spring 框架 5。

如书中所述,@Scope注释代码如下

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Scope {
        @AliasFor("scopeName")
        String value() default "";
        @AliasFor("value")
        String scopeName() default "";
        ScopedProxyMode proxyMode() default ScopedProxyMode.DEFAULT;
}

然后他们提到以下三个调用是相同的:

@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)

@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)

@Scope(scopeName = ConfigurableBeanFactory.SCOPE_SINGLETON)

我知道 valuescopeName 可以互换,但据我所知,它们并不是指 proxyMode.

我原以为第一个与第二个和第三个不同,这是我认为是真的:

value="" ; socopeName =""; proxyMode = SCOPE_SINGLETON

value="SCOPE_SINGLETON" ; socopeName ="SCOPE_SINGLETON"; proxyMode = DEFAULT

value="SCOPE_SINGLETON" ; socopeName ="SCOPE_SINGLETON"; proxyMode = DEFAULT

引擎盖下发生了什么,这三个是相同的?

谢谢

正如 value() 的 javadoc 所说:

Alias for scopeName().

这只是因为 使用 注释的代码使它如此。如果第一个调用返回默认值 "".

,则调用 scopeName() 的代码将返回并调用 value()

Java 语言规范使以下内容相同:

@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)

Java 语言规范,第 9.7.3. Single-Element Annotations 节说:

A single-element annotation, is a shorthand designed for use with single-element annotation types (§9.6.1).

SingleElementAnnotation:
@ TypeName ( ElementValue )

普通注解为shorthand:

@TypeName(value = ElementValue)