为什么这三个注解的调用是相同的?

js5cn81o  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(379)

我正在读关于springframework5的文章。
如书中所述 @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;
}

然后他们提到以下三个电话是相同的:
@范围(configurablebeanfactory.scope\u singleton)
@范围(值=configurablebeanfactory.scope\u singleton)
@范围(scopename=configurablebeanfactory.scope\u singleton)
我明白了 value 以及 scopeName 是可互换的,但据我所知,它们并不是指 proxyMode .
我原以为第一个和第二个、第三个不一样,我相信这是真的:
值=“”;socopename=“”;proxymode=范围\单例
value=“scope\u singleton”;socopename=“范围\单例”;proxymode=默认值
value=“scope\u singleton”;socopename=“范围\单例”;proxymode=默认值
引擎盖下发生了什么,这三个是一样的?
谢谢

syqv5f0l

syqv5f0l1#

作为 value() 说:
的别名 scopeName() .
这仅仅是因为使用注解的代码使它如此。它是调用 scopeName() 会掉头打电话的 value() 如果第一次调用返回默认值 "" .
java语言规范使以下内容相同:

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

java语言规范,第9.7.3节。单元素注解,表示:
单元素注解是设计用于单元素注解类型的速记(§9.6.1).
SingleElement注解:
@类型名(elementvalue)
它是普通注解的简写:
@类型名(value=elementvalue)

相关问题