`
ikeycn
  • 浏览: 144182 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

注解(Annotation)的定义及使用

JVM 
阅读更多
今天学习了java的Annotation部分,这里使用一个简单的小应用总结一下Annotation的定义及使用。
应用场景:假设有一个类Wait4Test中有几个方法需要测试,我们用自定义的注解TestMethod表示需要测试的方法;另外某个标注了TestMethod的方法可能因为一些原因,暂时不需要进行测试,我们用另外一个自定义的注解Ignore进行标注。在TestManager类中识别出所有需要进行测试的方法,并返回。
在Ignore标注时,为了理解忽略测试的原因,所以需要给它传递一些参数:
reason:字符串数组类型,用于表示忽略的原因
author:普通字符串类型,用于表示标注者姓名
date:用另一注解Date表示的自定义注解类型,表示时间

下面是此应用的代码实现:
先定义三个自定义注解:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestMethod {

}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Ignore {
	String[] reason();		//用于接收表示Ignore原因的参数,用数组表示
	String author();		//用于表示设置Ignore的作者
	Date date();			//用于接收设置Ignore注释的时间的参数,该参数调用了另外的一个注解Date
}

public @interface Date {

	int year();
	int month();
	int day();
}


在自定义注解时,使用了另外的两个注解:Target和Retention
Target注解用于设置此处定义的注解使用的位置,各种可取值在ElementType中定义
Retention注解用于设置此处定义的注解的保留期限,包括了三种不同的类型:
  Source:此注解仅在源码级别有效,编译时会被丢弃
  Class:保存在类文件中,在运行时会被丢弃
  Runtime:保存在类文件中,在运行时由JVM保留

下面的代码是需要进行标注的类,该类的方法定义时使用了我们上面定义的注解:

public class Wait4Test {
	@TestMethod
	public void testA() {

	}

	@TestMethod
	public void testB() {

	}
	
	/**
	 * Ignore注解中使用了多个参数,并且是不同类型的
	 * reason表示了设置数组类型的参数的方式
	 * author表示设置普通参数的方式
	 * date表示了设置另外一种注解表示的参数的方式
	 */
	@Ignore(reason = { "reason1", "reaon2" }, author = "yige", date = @Date(year = 2010, month = 10, day = 7))
	@TestMethod
	public void testC() {

	}
}


下面的代码用于根据注解判断哪些方法需要进行测试:
public class TestManager<T> {

	private Class<T> testClass;

	public TestManager(Class<T> testClass) {
		this.testClass = testClass;
	}
	public List<Method> loadTestMethods() {
		List<Method> testMethods = null;
		if (testClass != null) {
			testMethods = new ArrayList<Method>();
			for (Method method : testClass.getDeclaredMethods()) {
				/**
				 * 通过Method对象的isAnnotationPresent方法判断该方法是否被标注了某种注解
				 */
				if (method.isAnnotationPresent(TestMethod.class)
						&& !method.isAnnotationPresent(Ignore.class)) {
					testMethods.add(method);
				}
			}
		}
		return testMethods;
	}
} 
分享到:
评论

相关推荐

    Java用注解的方式定义一个Servlet

    用注解的方式定义一个Servlet,就不用在web.xml中配置了。Servlet的访问URL是Servlet的必选属性,可以选择使用urlPatterns或者value定义。  像上面的AnnotationServlet可以描述成@WebServlet(name="Annotation...

    浅谈Java中注解Annotation的定义、使用、解析

    下面小编就为大家带来一篇浅谈Java中注解Annotation的定义、使用、解析。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Java Annotation注解.doc

    本文针对java初学者或者annotation初次使用者全面地说明了annotation的使用方法、定义方式、分类。初学者可以通过以上的说明制作简单的annotation程序,但是对于一些高级的annotation应用(例如使用自定义annotation...

    java教程之java注解annotation使用方法

    主要介绍了java注解annotation使用方法,注解可以定义到方法上,类上,一个注解相当与一个类,就相当于实例了一个对象,加上了注解,就相当于加了一个标志

    java注解详解

    1.注解(Annotation)简介 2.JDK提供几个常用注解 3.元注解 4.注解的生命周期 5.注解的定义 6.注解的使用

    基于Java注解(Annotation)的自定义注解入门介绍

    要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法

    Java中三种标准注解和四种元注解.pdf

    Java5.0定义了4个标准的meta-annotation类型,它们被⽤来提供对其它 annotation类型作说 明。Java5.0定义的元注解:  1.@Target,  2.@Retention,  3.@Documented,  4.@Inherited  这些类型和它们所⽀持的类在...

    hibernate annotation 中文文档

    定义表(Table) 2.2.1.2. 乐观锁定版本控制 2.2.2. 映射简单属性 2.2.2.1. 声明基本的属性映射 2.2.2.2. 声明列属性 2.2.2.3. 嵌入式对象(又名组件) 2.2.2.4. 无注解之属性的默认值 2.2.. 映射主键属性 2.2.4. 映射...

    Java枚举类的使用与注解

    一、枚举类的使用: 1.枚举类的理解:类的对象只有有限个,确定的。我们称此为枚举类 2.当需要定义一组常量时,强烈建议使用枚举类。...五、注解(Annotation)概述 二、常见的Annotation 示例: 六、JDK中的元

    Hibernate Annotation笔记

    借助新的 Hibernate Annotation 库,即可一次性地分配所有旧映射文件——一切都会按照您的想法来定义——注释直接嵌入到您的Java 类中,并提供一种强大及灵活的方法来声明持久性映射。 即利用hibernate注解后,可...

    java7源码-Android-Annotation-Study:Android注解生成代码

    ADT时代就已经开始使用AvailableAnnotations注解框架,极大简化了Android开发。只是一开始并不了解其原理,感觉这个黑科技还是蛮厉害的,但每次遇到问题总要排查很久。如今Android Studio大行其道,对注解技术支持的...

    java元注解.docx

    在Java中,元注解(Meta-Annotation)是一种特殊类型的注解,用于注解其他注解。元注解提供对注解的元数据进行定义和控制的能力。Java中提供了几个预定义的元注解,用于定制和修改注解的行为。让我们详细介绍一下...

    想自己写框架?不了解Java注解(Annotation)机制可不行,来跟我一起通过源码深入Java注解机制

    注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行...

    Java annotation

    本文针对java初学者或者annotation初次使用者全面地 说明了annotation 的使用方法、定义方式、分类。初学者可以通过以上的说明制作简单的 annotation程序,但是对于一些高级的 annotation应用

    java8源码-Annotation_demo:Annotation_demo

    我们可以可以定义一个注解,方便我们使用等等。 注解元 在进行了解注解时我们先来了解一下,一般注解主要包含以下几个重要的注解元,java注解的机制离不开这几个注解元。 注解元 介绍&lt;功能&gt; 1.@Target 注解用于...

    annotation.txt

    即解决了@Controller注解的使用前提配置&lt;context:annotation-config/&gt;是对包进行扫描,实现注释驱动Bean定义,同时将bean自动注入容器中使用。即解决了@Controller标识的类的bean的注入和使用。 

    Java+Annotation.pdf

    针对java 初学者或者annotation 初次使用者全面地说明了annotation 的使用方法、定义 方式、分类。初学者可以通过以上的说明制作简单的annotation 程序,但是对于一些高级的 annotation 应用(例如使用自定义...

    springMVC4-rest-jackson-jsonview-annotation.zip

    我们的POJO使用@JsonView注解属性传递已经定义的视图。在Spring的Controller我们可以使用Jackson的@JsonView注解我们的方法。序列化Http响应体的时候,JSON响应将在配置视图的基础上进行过滤。我们也可以在Spring ...

    Java内功修炼系列:注解(Annotation)

    目录 一 注解的定义 二 如何自定义注解 三 元注解 3.1 @Retention 3.2 @Target ...六 注解的使用场景 七 注解实战之简易测试框架 补充1 :元数据 参考文章: 一 注解的定义 Java 注解是从 Java5 开

Global site tag (gtag.js) - Google Analytics