首页 > 解决方案 > 为什么这三个注解的调用是一样的?

问题描述

我正在阅读有关 Spring Framework 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(值 = ConfigurableBeanFactory.SCOPE_SINGLETON)

@Scope(scopeName = ConfigurableBeanFactory.SCOPE_SINGLETON)

我已经理解 value并且scopeName可以互换,但据我所知,它们没有引用proxyMode.

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

价值=“”;索科普名称=""; proxyMode = SCOPE_SINGLETON

value="SCOPE_SINGLETON" ; socopeName =“SCOPE_SINGLETON”;代理模式 = 默认

value="SCOPE_SINGLETON" ; socopeName =“SCOPE_SINGLETON”;代理模式 = 默认

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

谢谢

标签: javaspringscopeannotations

解决方案


正如 javadocvalue()所说:

的别名scopeName()

这是正确的,因为使用注释的代码使其如此。如果第一次调用返回默认值,则调用的代码scopeName()将转而调用。value()""

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

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

Java 语言规范,第9.7.3 节。单元素注释,说:

单元素注释,是设计用于单元素注释类型的简写(第9.6.1 节)。

SingleElementAnnotation :
@TypeName ( ElementValue )

它是普通注释的简写:

@TypeName (值 = ElementValue )


推荐阅读