默认情况下,将批注配置为RUNTIME保留(没有单独的@Retention)

时间:2018-11-21 16:52:49

标签: java annotations

是否可以进行配置,其中所有给定名称或类型的注释自动 RetentionPolicy.RUNTIME

我遇到了一个难题,我需要在运行时使用反射来搜索某些注释。但是这些是遍布整个应用程序的常见注释,例如@Service@Transactional,我无法一一列举并将@RetentionPolicy加到每个注释中,这太长了

1 个答案:

答案 0 :(得分:1)

Java语言规范的9.6.4.2. @Retention部分规定:

  

如果T没有对应于array([ 11.18083778, 12.00065196, 12.88057749, 13.82502193, 14.838716 , 15.92673731, 17.09453577, 18.34796088, 19.69329106, 21.13726508, 22.68711581, 24.35060647, 26.1360695 , 28.05244828, 30.10934199, 32.31705361, 34.68664159, 37.22997521, 39.95979405, 42.88977178, 46.0345847 , 49.40998519, 53.03288065, 56.9214182 , 61.09507555, 65.57475857, 70.38290604, 75.54360201, 81.08269642, 87.02793465, 93.40909644, 100.25814508, 107.6093875 , 115.49964612, 123.96844331, 133.05819935, 142.81444487, 153.28604899, 164.52546404, 176.58898835, 189.53704818, 203.43450047, 218.35095766, 234.36113639, 251.54523176, 269.98931903, 289.78578477, 311.03378962, 333.83976499, 358.31794618]) 的(元注释)m,则Java编译器必须将T视为确实具有这样的元-注释java.lang.annotation.Retention,其元素的值为m

如您所见,严格要求缺失的注释与java.lang.annotation.RetentionPolicy.CLASS相同。

如果您需要@Retention(RetentionPolicy.CLASS),则必须明确指定。