运行时读取注解-flume构建高可用、可扩展的海量日志采集系统(带标签清晰__p208_2015.08)
7.6运行时读取注解要用好注解,必须熟悉反射机制,注解的解析完全依赖于反射。实际上,java.lang.reflect包所提供的反射API扩充了读取运行时注解信息的能力,它新增了AnnotatedElement接口,该接口代表程序中可以接受注解的程序元素。程序通过反射获取某个类的Class对象之后,就可以调用该对象的如下方法来访问注解信息。 • public Annotation getAnnotation(Class annotationType),返回该程序元素上存在的、指定类型的注解,如果该类型注解不存在,则返回null。 • public Annotation[] getAnnotations(),返回该程序元素上存在的所有注解。 • public Annotation[] getDeclaredAnnotations(),返回直接存在于此元素上的所有注解。 • public boolean isAnnotationPresent(Class annotationType),判断该程序元素上是否包含指定类型的注解,存在则返回true,否则返回false。由于Class、Constructor、Field、Method和Package等都实现了AnnotatedElement接口,所以可以从这些类的实例上取得标示于其上的注解信息。为了在运行时读取到注解信息,定义注解时必须设置RetentionPolicy为RUNTIME,也就是允许在JVM中访问注解信息。以下注解FruitProvider限定使用范围为属性,生命期为运行时。程序清单7-24: @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface FruitProvider { public int id() default -1; public String name() default ""; public String address() default ""; }注解使用示例如下:程序清单7-25: public class Apple { @FruitProvider( id=1, name="山东烟台", address="栖霞市解放路") private String appleProvider; public void setAppleProvider(String appleProvider) { this.appleProvider = appleProvider; } public String getAppleProvider() { return appleProvider; } public void displayName(){ System.out.println("水果的名字是:苹果"); } }
6.96MB
文件大小:
评论区