java - 为什么这三个注解的调用是一样的?
问题描述
我正在阅读有关 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”;代理模式 = 默认
引擎盖下会发生什么,这三个是相同的?
谢谢
解决方案
正如 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 )
推荐阅读
- postgrest - 使用 postgREST API 进行 OR 操作
- flutter - 飞镖 | 如何从类构造函数返回不同的对象
- javascript - 尝试打开带有完整结果的 autocomplete.js 弹出窗口
- javascript - 在 html 网站中添加一个按钮以更改为暗模式
- python - Python pandas:使用随机字符串更改每一行的值
- c++ - C ++模板函数检查向量是否包含值?
- assembly - 系统在 QEMU 上启动,但在真实硬件上出现恐慌(重新启动)
- c++ - 我可以为多个向量使用一个分配器实例吗?
- mongodb - MongoDb 日期查询问题
- caching - 在 Dragon 一致性协议下,强制未命中的区块处于什么状态?