告知编译程序如何处理@Retention:
java.lang.annotation.Retention型态可以在您定义Annotation型态时,指示编译程序该如何对待您的自定义Annotation型态。
预定义上编译程序会将Annotation信息留在.class文档中,但不被虚拟机读取,而仅用于编译程序或工具程序运行时提供信息。
java.lang.annotation.RetentionPolicy 有三个枚举类型:CLASS、RUNTIME、SOURCE
只有当Annotation被指示成RUNTIME时,在运行时通过反射机制才能被JVM读取,否则,JVM是读取不到这个Annotation的。
java 代码
- package com.test;
-
- import java.lang.annotation.Retention;
- import java.lang.annotation.RetentionPolicy;
-
- @Retention(RetentionPolicy.RUNTIME)
- public @interface RetentionTest {
- String hello() default "hello";
- String world();
- }
java 代码
- package com.test;
-
- public class MyTest {
- @RetentionTest(hello = "beijing", world = "shanghai")
- @Deprecated
- @SuppressWarnings("unchecked")
- public void output()
- {
- System.out.println("output");
- }
- }
java 代码
- package com.test;
-
- import java.lang.annotation.Annotation;
- import java.lang.reflect.Method;
-
- public class ReflectRetentionTest {
-
- public static void main(String[] args) throws Exception{
- MyTest mt = new MyTest();
- Class<mytest></mytest> c = MyTest.class;
- Method method = c.getMethod("output",new Class[]{});
- if(method.isAnnotationPresent(RetentionTest.class))
- {
- method.invoke(mt, new Object[]{});
-
- RetentionTest retentionTest = method.getAnnotation(RetentionTest.class);
-
- System.out.println(retentionTest.hello());
- System.out.println(retentionTest.world());
- }
-
- Annotation[] annotations = method.getAnnotations();
- for(Annotation annotation: annotations)
- {
- System.out.println(annotation.annotationType().getName());
- }
-
-
- }
- }
运行第三个程序
分享到:
相关推荐
Retention注解用于定义一个注解的生存周期,即在程序的哪个阶段仍然有效。Java提供了三种RetentionPolicy策略: - `RetentionPolicy.SOURCE`:注解只存在于源代码阶段,编译后不会保留。这通常用于编译器的语法...
1. **了解业务需求**:首先,你需要理解你的应用程序的事务特性,包括平均事务持续时间、事务回滚频率等。这将帮助你确定合理的UNDO_RETENTION值。 2. **监控当前设置**:通过查询数据库的系统视图,你可以查看当前...
Java 元注解包括四大类:@Retention、@Target、@Documented、@Inherited 等。 1.@Retention @Retention 用于指定注解的保留期限,可以设置为 SOURCE、CLASS 或 RUNTIME。 * RetentionPolicy.SOURCE:注解只保留在...
编译时注解,顾名思义,就是这些注解在编译阶段起作用,它们对程序的运行时行为没有直接影响,但能帮助编译器进行检查或生成额外的辅助文件。 ## 1. 注解类型 Java中的注解分为三种类型:源码保留(Source ...
1. **编译时处理(Compile-Time Processing)**:通过`@Retention(RetentionPolicy.SOURCE)`或`@Retention(RetentionPolicy.CLASS)`指定注解只在源码或字节码阶段有效,常用于代码生成、格式检查等。Java编译器在...
3. 运行时注解,即标记为@Retention(RetentionPolicy.RUNTIME)的注解,这种注解既会在编译时被处理,也会在运行时被JVM保留,从而可以通过反射机制在程序运行期间访问和操作。 Java反射机制则允许在运行时动态地...
@Retention(RetentionPolicy.RUNTIME ) SOURCE 给编译器看的# 源码存在,字节码不存在 CLASS 给虚拟机的类加载器看的,#源码,.class存在, RUNTIME 用于反射 #源码,.class 字节码 存在 @Documented 这个注解可以...
Java 注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用。 一、元注解 元注解是指注解的注解。包括 @...
1. **编译时处理**:通过`@Retention(RetentionPolicy.CLASS)`或`@Retention(RetentionPolicy.SOURCE)`,注解可以在编译时被处理。编译器可以检查注解并采取相应行动,例如,检查`@Override`是否真的重写了父类方法...
在实际编程中,这些元注解可以帮助我们更好地控制和利用自定义注解,实现如代码注释、编译时检查、运行时处理等多种功能。例如,通过`@Retention(RetentionPolicy.RUNTIME)`,我们可以编写代码在运行时通过反射机制...
在Java编程语言中,JDK 1.5引入了一项重要的新特性——注释(Annotations),这是一种元数据,用于提供程序元素(如类、方法、变量等)的附加信息。这些信息可以被编译器、IDE或其他工具用来验证代码、生成代码、...
Java自定义注解是Java语言中的一个重要特性,它允许开发者在代码中添加元数据,以提供额外的信息,比如编译时或运行时的处理规则。注解与传统的注释不同,注解可以被编译器或者JVM读取并执行相应的处理。在Java中,...
- 使用`@Processor`注解定义注解处理器,可以在编译时处理注解信息,例如代码生成、编译检查等。 - Java的`Processor`接口是JSR 269的一部分,实现了该接口的类会在编译期间被调用。 5. **注解的使用场景** - **...
在Java中,我们可以使用`@Retention(RetentionPolicy.SOURCE)`或`@Retention(RetentionPolicy.CLASS)`声明编译时注解。 接下来,我们来看如何实现`@BindView`和`@ContentView`这两个注解。`@BindView`用于将XML布局...
注解在Java中主要用来简化配置、提供编译时和运行时的元信息、实现自动化的处理任务等。 **注解的类型** 1. **源码级注解(Source-level Annotations)**:这些注解在编译期间由编译器处理,例如`@Override`用于...
要模拟实现这个功能,我们需要创建一个自定义注解,例如`@MyAutowired`,然后编写一个处理该注解的后处理器,使用Java的反射API来查找和注入依赖。 ```java @Retention(RetentionPolicy.RUNTIME) @Target(Element...
Annotation 是一个接口,程序可以通过反射来获取指定程序中元素的 Annotation 对象,然后通过该 Annotation 对象来获取注解中的元数据信息。 在 Java 中,Annotation 可以被用于提供元数据信息,例如:作者、版本号...
Java 注解(Annotation)是Java语言的一个重要特性,它为代码提供元数据,即关于代码的信息,但这些信息不直接影响程序的运行。注解在Java中主要用于编译器检查、运行时处理、框架生成元数据等场景。本篇将深入探讨...
注解本身并不会对程序的行为产生直接影响,它只是提供了额外的信息。通常需要通过反射机制来读取这些信息并执行相应的操作。例如: ```java public static void process(String str) throws ClassNotFoundException...