`

Java5中的注释Annotation

    博客分类:
  • JAVA
阅读更多

注释是java5中的新特性,谈到注释,先的谈谈Java元数据(metadata)。元数据,就是“关于数据的数据”。Java元数据有3种基本类型,还有3个Java内置注释类型,另外还有4中元注释类型。你可能用过Javadoc的注释自动生成文档。这就是元数据功能的一种。总的来说,元数据可以用来创建文档,跟踪代码的依赖性,执行编译时格式检查,代替已有的配置文件(如Hibernate也提供了注释配置)。

注释有3中基本类型
a.标记注释 –没有变量,只有名称标识。例如 @annotation
b.单一值注释 –在标记注释的基础上提供一段数据。如 @annotation(“javachen”)
c.完整注释 –可以包括多个数据成员,每个数据成员由名称和值构成。@annotation(site=”www.javachen.com”,author=”javachen”)

Java中提供3个内置注释类型
a. Override ,只能用于方法(不能用于类,包声明或者其他构造)
作用:可以保证编译时候Override函数的声明正确性
用法:
@Override
public void fun(){..}

b.Deprecated 同样只能作用与方法
作用:对不应再使用的方法进行注解
用法:@Deprecated public void fun{…}

c.SupressWarnings 可以注释一段代码
作用:关闭特定的警告信息,例如你在使用泛型的时候未指定类型
用法: @SupressWarnings(value={“unchecked”})

Java中还提供了四种元注释,专门负责注释其他的注释

@Target 表示该注释可以用于什么地方。可用的ElementType参数包括:
CONSTRUCTOR : 构造器的声明
FIELD : 域声明(包括enum实例)
LOCAL_VARIABLE : 局部变量声明
METHOD : 方法声明
PACKAGE : 包声明
PARAMETER : 参数声明
TYPE : 类、接口 (包括注解类型) 或enum声明

@Retention 表示需要在什么级别保存该注释信息。可选的RetentionPoicy参数包括:
SOURCE : 注释将被编译器丢掉
CLASS : 注释在class文件中可用,但会被VM丢弃
RUNTIME : VM将在运行时也保留注释,因此可以通过反射机制读取注释的信息。

@Documented 将注释包含在JavaDoc中
@Inheried 允许子类继承父类中的注释。

在Java中定义自己的注释

Java语言支持一种新的类型——注释类型(annotation type),跟普通类差不多,在类中以符号( @ )的形式注释其他 Java 代码,用@interface 申明自定义注释类型。

package com.javachen.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 用户自定义标签,带有成员变量的MyTag
 */
@Documented //将注释包含在JavaDoc中
@Inherited //允许子类继承父类中的注释。
@Target(value = {ElementType.METHOD,ElementType.CONSTRUCTOR})//标注这个注释使用的范围
@Retention(value = RetentionPolicy.RUNTIME)//要想使用反射得到注释信息,这个注释必须使用
public @interface MyTag {
	String name()  default "javachen";//给自定义注释类的成员加上默认值
	int age()  default 24;
}

注意:在自定义注释中只有一个成员时,方法名应该为value
使用标签最终是为了帮助开发人员提取注释信息,然后根据不同需求做进一步处理,下面我们来看看如何获取注释信息。

package com.javachen.annotation;

import java.lang.annotation.Annotation;

public class TagTest {
	@MyTag(name = "MyTag", age = 1)
	public void test() {
	}

	@Override //可以保证编译时候Override函数的声明正确性
	public String toString() {
		return super.toString();
	}

	@Deprecated //对不应再使用的方法进行注解
	public String notToUse() {
		return super.toString();
	}

	public static void main(String[] args) {
		TagTest tt = new TagTest();
		try {
			Annotation[] annotation = tt.getClass().getMethod("test")
					.getAnnotations();
			for (Annotation tag : annotation) {
				System.out.println("Tag is:" + tag);
				System.out.println("tag.name()" + ((MyTag) tag).name());
				System.out.println("tag.age()" + ((MyTag) (tag)).age());
			}
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		}
	}
}

需要注意的一点是,在执行这段代码之前我们还有一点小工作要做,还需要给我们的自定义标签MyTag加上一个说明标签,@ Retention, 表明注释信息将可以在运行时刻通过反射机制得到。如果不加入这个标签,上面的代码将没有任何输出。

如何使用反射读取注释

在以前的JDK版本中,我们可以使用反射得到类的方法、方法的参数以及其它的类成员等信息。那么在J2SE5.0中同样也可以象方法一样得到注释的各种信息。
在使用反射之前必须使用import java.lang.reflect.* 来导入和反射相关的类。

如果要得到某一个类或接口的注释信息,可以使用如下代码:
Annotation annotation = TestAnnotation.class.getAnnotation(MyAnnotation.class);

如果要得到全部的注释信息可使用如下语句:
Annotation[] annotations = TestAnnotation.class.getAnnotations();

Annotation[] annotations = TestAnnotation.class.getDeclaredAnnotations();

getDeclaredAnnotations与getAnnotations类似,但它们不同的是getDeclaredAnnotations 得到的是当前成员所有的注释,不包括继承的。而getAnnotations得到的是包括继承的所有注释。

如果要得到其它成员的注释,可先得到这个成员,然后再得到相应的注释。如得到myMethod的注释。
Method method = TestAnnotation.class.getMethod(“myMethod”, null);
Annotation annotation = method.getAnnotation(MyAnnotation.class);

注:要想使用反射得到注释信息,这个注释必须使用
@Retention(value = RetentionPolicy.RUNTIME)进行注释。

分享到:
评论

相关推荐

    java1.5 annotation注释源代码

    Java 1.5 引入了一种新的元编程机制——注解(Annotation),极大地增强了代码的可读性和可维护性。注解是一种在代码中添加元数据的方式,它允许程序员在源代码上添加一些信息,这些信息可以被编译器或运行时环境...

    JAVA中如何写注释ji

    JAVA注释的写法和重要性 Java 中的注释是提高代码可读性和维护性的重要手段。通过添加注释,可以使不同的创作者或者阅读者进行良好的阅读和理解代码的逻辑和意图。Java 中的注释有三种格式,即单行注释、多行注释和...

    Java Annotation

    Java Annotation(注解)是自 Java 5.0 开始引入的一种语言元素,它为开发者提供了在代码中添加元数据的能力。简单来说,注解就像是对代码进行标记或注释的方式,这些标记可以在编译时或者运行时被读取并执行特定的...

    Java_Annotation详解

    元数据在编程中扮演着至关重要的角色,尤其是在Java中,通过注解(Annotation)这一特性,元数据被广泛应用于多个方面,包括但不限于文档生成、代码分析以及编译时的检查。尽管元数据作用的分类并未有固定的标准,但...

    java-annotation-processor:JAVA注释处理器

    在`java-annotation-processor-master`这个项目中,你可以找到一个关于如何创建和使用Java注释处理器的示例。该项目可能包含以下几个部分: - `src/main/java`: 存放注解处理器和相关注解的源代码。 - `src/main/...

    javaAnnotation.pdf

    Java Annotation 是一种在 J2SE 5.0 版本中引入的重要特性,它遵循JSR-175规范,允许程序员在代码中嵌入元数据。元数据是关于数据的数据,可以用来创建文档、追踪代码依赖关系以及执行编译时检查。在Java中,注释...

    jakarta.annotation-api-1.3.5-API文档-中文版.zip

    赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta....人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    重难点之JavaAnnotation手册.pdf

    在Java编程语言中,Annotation是一种重要的元数据机制,它允许程序员在源代码中嵌入附加信息,这些信息可以用于编译器、构建工具、框架或其他工具的处理。在《Java Annotation入门》之后的这篇《重难点之Java...

    eclipse配置Java代码注释模板

    eclipse配置Java代码注释模板,Window -> Preferences -> Java -> Code Style -> Code Templates,点击import导入注释模板,勾选Automatically add comments for new methods and types,选择Comments和Code中的注释...

    Annotation注解的介绍和使用

    Annotation,即注解,是Java 5.0引入的一个新特性,用于向代码中插入元数据。它是一种声明式机制,允许开发者在代码中嵌入非功能性数据,这些数据不会影响代码的运行逻辑,但可以被编译器或其他工具读取和处理。注解...

    第-章-JAVA反射和注释优秀文档.pptx

    注释(Annotation)是Java提供的一种元数据,用于向编译器或JVM提供关于代码的额外信息。注释可以用于配置、编译时检查、运行时处理等。Java提供了预定义的注释类型,如@Override、@Deprecated,同时也允许用户...

    使用annotation获取实体类注释

    这篇博客“使用annotation获取实体类注释”主要探讨了如何利用注解来增强代码的可读性和可维护性,同时介绍了如何从实体类中获取已定义的注解信息。以下是关于这个主题的一些关键知识点: 1. **注解定义**:注解以`...

    JAVA_API1.6文档(中文)

    java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机...

    java源代码中文注释.zip

    5. **接口**:接口在Java中是一种完全抽象的类,只包含常量和抽象方法。它用于定义对象的行为规范,多个类可以实现同一个接口,实现多继承的效果。 6. **异常处理**:Java使用try-catch-finally语句块来捕获和处理...

    Java 注释编码

    Java 注释编码的知识点涵盖了Java注解(Annotations)的基本概念、语法、使用场景以及与Java SE 8的变化。注解是Java SE 5引入的一个特性,用于为Java代码提供元数据。这些元数据可以被编译器读取,也可以用于运行时...

    Spring基于注释(Annotation)的配置.pdf

    ### Spring基于注释(Annotation)的配置 #### 一、`@Autowired` 注释 `@Autowired` 是Spring框架提供的一种自动装配机制,用于简化Bean的依赖注入过程。该注解可以应用于类成员变量、方法及构造函数,帮助实现按...

    javax.annotation-api-1.2-API文档-中文版.zip

    赠送jar包:javax.annotation-api-1.2.jar; 赠送原API文档:javax.annotation-api-1.2-javadoc.jar; 赠送源代码:javax.annotation-api...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    史上最完整java注释教程

    Java注释是编程语言中的一种重要工具,用于提供元数据信息,这些信息可以在代码的生命周期中起到多种作用,包括但不限于帮助开发人员理解代码、辅助工具进行自动化处理以及提供运行时的元数据查询。在Java中,注释并...

Global site tag (gtag.js) - Google Analytics