@Retention定义保留此Annotation的时间长度。
1 .有些Annotation只出现在源代码中,被编译器丢弃;
2 .其他一些将编译为class文件,注释将保留在class文件中,并在加载到JVM虚拟机中时丢弃。 这是缺省行为,因此没有使用Retention注释的注释将采用此策略
某些类型的class在加载时会被读取。 注释在程序运行时仍会保留,并且可以通过反射获取类中定义的所有注释
角色:用于指示应在什么级别存储注释信息,并描述注释的生命周期。 也就是说,它指示所写的注释在什么范围内有效
取值(RetentionPoicy )如下所示。
1.SOURCE:在源文件中有效。 这意味着将保留源文件
2.CLASS:在class文件中有效(即class预约)。
3.RUNTIME:在运行时有效(即运行时挂起) ) )。
“保留元数据-身份”类型具有唯一的值作为成员
此值来自Java.lang.annotation.retention policy的枚举类型的值。 具体例子如下。
//*
*限流注释
*/
@target(elementtype.method ) )。
@ retention (retention policy.runtime ) )。
@Documented
公共@ interface rate limit {
//*
* @ returnratelimitinqueriespersecond
*/
String value () default ' );
double permits () default 1000;
}
由于RateLimit注释的RetentionPolicy的属性值为RUNTIME,因此注释处理器可以通过反射获得注释的属性值,并进行执行时的逻辑处理