今天学习了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;
}
}
分享到:
相关推荐
用注解的方式定义一个Servlet,就不用在web.xml中配置了。Servlet的访问URL是Servlet的必选属性,可以选择使用urlPatterns或者value定义。 像上面的AnnotationServlet可以描述成@WebServlet(name="Annotation...
下面小编就为大家带来一篇浅谈Java中注解Annotation的定义、使用、解析。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
本文针对java初学者或者annotation初次使用者全面地说明了annotation的使用方法、定义方式、分类。初学者可以通过以上的说明制作简单的annotation程序,但是对于一些高级的annotation应用(例如使用自定义annotation...
主要介绍了java注解annotation使用方法,注解可以定义到方法上,类上,一个注解相当与一个类,就相当于实例了一个对象,加上了注解,就相当于加了一个标志
1.注解(Annotation)简介 2.JDK提供几个常用注解 3.元注解 4.注解的生命周期 5.注解的定义 6.注解的使用
要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法
Java5.0定义了4个标准的meta-annotation类型,它们被⽤来提供对其它 annotation类型作说 明。Java5.0定义的元注解: 1.@Target, 2.@Retention, 3.@Documented, 4.@Inherited 这些类型和它们所⽀持的类在...
定义表(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. 映射...
一、枚举类的使用: 1.枚举类的理解:类的对象只有有限个,确定的。我们称此为枚举类 2.当需要定义一组常量时,强烈建议使用枚举类。...五、注解(Annotation)概述 二、常见的Annotation 示例: 六、JDK中的元
借助新的 Hibernate Annotation 库,即可一次性地分配所有旧映射文件——一切都会按照您的想法来定义——注释直接嵌入到您的Java 类中,并提供一种强大及灵活的方法来声明持久性映射。 即利用hibernate注解后,可...
ADT时代就已经开始使用AvailableAnnotations注解框架,极大简化了Android开发。只是一开始并不了解其原理,感觉这个黑科技还是蛮厉害的,但每次遇到问题总要排查很久。如今Android Studio大行其道,对注解技术支持的...
在Java中,元注解(Meta-Annotation)是一种特殊类型的注解,用于注解其他注解。元注解提供对注解的元数据进行定义和控制的能力。Java中提供了几个预定义的元注解,用于定制和修改注解的行为。让我们详细介绍一下...
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行...
本文针对java初学者或者annotation初次使用者全面地 说明了annotation 的使用方法、定义方式、分类。初学者可以通过以上的说明制作简单的 annotation程序,但是对于一些高级的 annotation应用
我们可以可以定义一个注解,方便我们使用等等。 注解元 在进行了解注解时我们先来了解一下,一般注解主要包含以下几个重要的注解元,java注解的机制离不开这几个注解元。 注解元 介绍<功能> 1.@Target 注解用于...
即解决了@Controller注解的使用前提配置<context:annotation-config/>是对包进行扫描,实现注释驱动Bean定义,同时将bean自动注入容器中使用。即解决了@Controller标识的类的bean的注入和使用。
针对java 初学者或者annotation 初次使用者全面地说明了annotation 的使用方法、定义 方式、分类。初学者可以通过以上的说明制作简单的annotation 程序,但是对于一些高级的 annotation 应用(例如使用自定义...
我们的POJO使用@JsonView注解属性传递已经定义的视图。在Spring的Controller我们可以使用Jackson的@JsonView注解我们的方法。序列化Http响应体的时候,JSON响应将在配置视图的基础上进行过滤。我们也可以在Spring ...
目录 一 注解的定义 二 如何自定义注解 三 元注解 3.1 @Retention 3.2 @Target ...六 注解的使用场景 七 注解实战之简易测试框架 补充1 :元数据 参考文章: 一 注解的定义 Java 注解是从 Java5 开