`
sunqitang
  • 浏览: 76998 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

annotation(@Retention)

阅读更多

Retention型态可以在您定义Annotation型态时,指示编译程序该如何对待您的自定义的Annotation型态。预设上编译程序会将Annotation信息留在.class档案中,但不被虚拟机读取,而仅仅用于编译程序或工具程序运行时提供信息。


在使用Retention时必须要提供一个RetentionPolicy的枚举类型参数。

RetentionPolicy有三个枚举内容:CLASS RUNTIME SOURCE
     SOURCE, //编译程序处理完Annotation信息后就完成任务
     CLASS,  //编译程序将Annotation储存于class档中,缺省
     RUNTIME //编译程序将Annotation储存于class檔中,可由VM读入(通过反射机制)。这个功能搭配反射是非常强大的。

 

当使用@Retention时要记得加参数和加入"包"。

 

例子:

   第一步:新建一个annotation,名字为:MyAnnotation.java。注意引入了Retention和RetentionPolicy这两个包

package test;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
	String hello() default "sunqitang";
	String world();
}

   第二步:建立一个MyTest.java 来使用上面的annotation。

public class MyTest {
	@MyAnnotation(world="Hello,world!",hello="Hello,beijing!")
	public void output(){
		System.out.println("output is running");
	}
}

  第三步:用反射机制来调用注解中的内容

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;

public class MyReflection  {
	public static void main(String[] args) throws Exception {
		Class<MyTest> c = MyTest.class;//获得要调用的类
		Method method = c.getMethod("output", new Class[]{});//获得要调用的方法,output为要调用方法名字,new Class[]{}为所需要的参数。由于为空,所以使用这个方式
		if(method.isAnnotationPresent(MyAnnotation.class)){//是否有类型为MyAnnotation的注解
			MyAnnotation annotation = method.getAnnotation(MyAnnotation.class);//获得注解
			System.out.println(annotation.hello()); //调用注解内容
			System.out.println(annotation.world());//调用注解内容
		}
		System.out.println("------------------------");
		Annotation[] annotations = method.getAnnotations();//获得所有注解。必须是在runtime类型的。
		for(Annotation annotation: annotations){//遍历所以注解的名称
			System.out.println(annotation.annotationType().getName());
		}
	}
}

 运行结果:

Hello,beijing!
Hello,world!
------------------------
test.MyAnnotation
 
分享到:
评论
1 楼 wteqiao 2014-11-07  
[color=orange][/color]  

相关推荐

    Java实战篇:设计自己的Annotation

    随后,文章深入探讨了如何自定义Annotation,包括使用`@Retention`和`@Target`注解来指定Annotation的生命周期和应用目标。最后,通过一个具体的示例展示了如何创建和使用自定义的Annotation。希望本文能够帮助读者...

    annotation

    import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType....

    Java自定义注解Annotation的使用

    ### Java自定义注解Annotation的使用 #### 1. 前言 自从JDK 1.5引入了注解这一特性以来,它已经成为Java开发中的一个重要组成部分。注解最初是为了推动EJB 3.0的普及和发展而设计的,其目的是减少配置文件的使用,...

    Java Annotation的讲解和例子

    Java 注解(Annotation)是Java语言的一个重要特性,它为代码提供元数据,即关于代码的信息,但这些信息不直接影响程序的运行。注解在Java中主要用于编译器检查、运行时处理、框架生成元数据等场景。本篇将深入探讨...

    详解JDK 5 Annotation 注解之@Target的用法介绍

    在Java编程语言中,注解(Annotation)是一种元数据,它提供了一种安全的方法来关联信息于程序元素,如类、方法、变量等,而这些信息可以被编译器或运行时系统用来进行验证或执行特定的任务。自JDK 5开始,注解成为...

    JAVA注解(Annotation).doc

    Java注解,也称为Annotation,是Java编程语言中的一种特性,用于向编译器、JVM或工具提供元数据。元数据是关于数据的数据,它提供了额外的信息,但不直接影响程序的执行。注解在代码中以`@注解名`的形式出现,主要...

    自定义注解annotation及用法

    在Java编程语言中,注解(Annotation)是一种元数据,它提供了向编译器、工具或运行时系统提供额外信息的方式。自定义注解允许开发者创建自己的标记来满足特定需求,比如代码生成、验证、持久化等。本文将深入探讨...

    JavaAnnotation手册.pdf

    元Annotation是用于定义其他Annotation的Annotation,例如`@Retention`和`@Target`本身就是元Annotation。元Annotation使得创建和定制Annotation的过程更加灵活,可以控制Annotation的生命周期、作用域以及如何处理...

    Java注解之Retention、Documented、Inherited介绍

    在Java中,注解有三种关键特性:Retention、Documented和Inherited,它们分别控制注解的生命周期、文档化和继承性。 1. **Retention(保留)** Retention注解用于定义一个注解的生存周期,即在程序的哪个阶段仍然...

    Annotation详细介绍(大全)

    `@Retention` Annotation用来控制Annotation的生命周期,它定义了Annotation在哪些阶段可见。`RetentionPolicy`有三个枚举值: - `CLASS`:默认策略,注解仅存在于编译后的字节码中,运行时不可见。 - `RUNTIME`...

    什么是Annotation?

    ### 什么是Annotation? #### 一、Annotation的概念 在Java 1.5版本中引入了一个重要的新特性——**Annotation**(注解)。Annotation本质上是一种元数据(即关于数据的数据),它提供了一种机制来关联程序元素...

    Annotation手册

    7. **元Annotation**:元Annotation是用于定义其他Annotation的Annotation,例如`@Retention`定义Annotation的生命周期(编译时、类加载时或运行时),`@Target`指定Annotation可以应用到哪些程序元素,`@Documented...

    02-Java注解面试题(2题)-新增.pdf

    @Retention meta-annotation 定义了 Annotation 被保留的时间长短。它用于描述注解的生命周期,即:被描述的注解在什么范围内有效。@Retention 取值包括: * SOURCE:在源文件中有效(即源文件保留) * CLASS:在 ...

    Java Annotation手册

    《Java Annotation手册》 在Java编程语言中,注解(Annotation)是一种元数据,它提供了在编译时或运行时处理代码的一种方式。通过注解,开发者可以向编译器或JVM提供有关代码的附加信息,而这些信息通常不直接影响...

    Java.Annotation

    - **Retention Policy**:通过`@Retention`,我们可以控制Annotation的生命周期,例如保留在源代码、编译后的字节码或运行时。常见的策略有`SOURCE`(只存在于源码)、`CLASS`(编译后丢弃)和`RUNTIME`(运行时可用...

    Annotation--学习:JDK内建Annotation

    在Java编程语言中,Annotation(注解)是一种元数据,它提供了在编译时和运行时为代码添加信息的方式。注解是自Java 5版本引入的特性,它增强了代码的可读性和可维护性,同时也简化了某些编程任务。在本篇中,我们将...

    Annotation注解的介绍和使用

    ### Annotation注解的深入解析与应用 #### 一、Annotation概览 ##### 1.1 何为元数据 元数据,在计算机科学中,是指用于描述数据的数据,它提供了关于数据本身的附加信息,有助于理解、解释和管理数据。在编程...

    Annotation--学习:限定使用、文档、继承

    在Java编程语言中,注解(Annotation)是一种元数据,它提供了在代码中附加信息的能力,这些信息可以被编译器或运行时环境用来验证、处理或增强代码的行为。本篇我们将深入探讨“限定使用、文档、继承”这三个关键...

    Java Annotation注解.doc

    Java Annotation,也称为注解,是Java编程语言中的一种元数据机制,用于向编译器、JVM或工具提供有关代码的附加信息。这些信息不直接影响代码的执行,但可以被编译器或运行时环境用来执行特定的操作,如代码分析、...

Global site tag (gtag.js) - Google Analytics