今天学习了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自定义注解Annotation的使用 #### 1. 前言 自从JDK 1.5引入了注解这一特性以来,它已经成为Java开发中的一个重要组成部分。注解最初是为了推动EJB 3.0的普及和发展而设计的,其目的是减少配置文件的使用,...
定义了注解后,可以在类、方法、变量等处使用。例如: ```java @Loggable(logLevel = Level.DEBUG) public class MyClass { @Loggable public void myMethod() { // ... } } ``` ### 4. 注解处理器 自定义...
2. 注解定义:注解使用`@interface`关键字定义,并且通常包含一组成员,成员可以是基本类型、字符串、枚举、其他注解,或者是以上类型的数组。 二、注解的使用 在Java中,注解的使用主要包括以下几个步骤: 1. ...
使用注解可以极大地简化数据库连接和操作的代码,比如通过Spring框架的JdbcTemplate或JPA(Java Persistence API),可以使用注解来定义实体类、表映射关系,以及SQL查询等。 例如,`@Entity`注解标识一个类为...
定义注解使用`@interface`关键字,并可以包含元素(成员),元素可以有默认值。例如,创建一个用于标记测试方法的注解: ```java @interface MyTest { String description() default ""; } ``` 四、注解处理器 ...
除了这些内置的注解,Java还允许开发者自定义注解,通过定义注解接口,使用`@interface`关键字。自定义注解可以有自己的元素(element),元素可以是基本类型、字符串或其他注解。自定义注解的解析通常由编译器插件...
在Struts2中,Annotation注解的引入为开发者提供了更加灵活和便捷的配置方式,使得无需在XML配置文件中进行繁琐的设置,可以直接在类或方法上通过注解来进行配置。本文将深入探讨Struts2中的Annotation配置,以及...
1. 定义注解:使用`@interface`关键字创建自定义注解,如`@MyAnnotation`。 2. 元注解:用于定义注解的行为,如`@Retention`、`@Target`、`@Documented`和`@Inherited`。 - `@Retention`:控制注解的生命周期,如`...
### Annotation注解的深入解析与应用 #### 一、Annotation概览 ##### 1.1 何为元数据 元数据,在计算机科学中,是指用于描述数据的数据,它提供了关于数据本身的附加信息,有助于理解、解释和管理数据。在编程...
### Java 注解Annotation实例上手文档 #### 一、引言与基础知识 Java注解(Annotation)自JDK 5.0引入以来,已经成为Java语言的重要特性之一,它为代码元数据提供了一种标准化的方式,使得编译器、工具和其他框架...
### Spring框架中的Annotation注解详解 #### 一、Spring与Annotation的基本概念 Spring框架通过引入Annotation,极大地简化了Java开发中的依赖注入(Dependency Injection, DI)和面向切面编程(AOP)的过程。...
### Struts2 使用注解(Annotation)实现文件下载 在Web开发中,文件上传与下载是常见的需求之一。Struts2框架提供了强大的功能来支持这一需求。本文将详细介绍如何使用Struts2框架结合注解(Annotation)的方式...
用注解的方式定义一个Servlet,就不用在web.xml中配置了。Servlet的访问URL是Servlet的必选属性,可以选择使用urlPatterns或者value定义。 像上面的AnnotationServlet可以描述成@WebServlet(name="Annotation...
1. **Annotation类型**:定义了一个特定的注解,类似于接口,包含名称和多个注解元素。每个定义的注解类型需要有一个名字和至少一个注解元素。 2. **注解元素**:是注解定义中的成员,可以是基本类型、字符串、类...
此外,还可以使用Annotation Processing Tool (APT)在编译时处理注解,生成额外的源代码或类文件。 4. **保留策略**:注解可以在编译时、运行时或两者都被保留。保留策略通过`@Retention`注解指定,例如`...
Android AOP 注解 Annotation 可以自定义,定义新的 Annotation 类型使用 @interface 关键字。自定义 Annotation 后,可以在程序中使用该 Annotation。使用 Annotation,非常类似于 public、final 等修饰符,通常,...
Java注解,也称为Annotation,是Java编程语言中的一种特性,用于向编译器、JVM或工具提供元数据。元数据是关于数据的数据,它提供了额外的信息,但不直接影响程序的执行。注解在代码中以`@注解名`的形式出现,主要...
2. **配置Spring**:在Spring的配置文件中,我们需要启用注解驱动的配置,并为DWR的初始化bean提供定义。例如,使用`<context:component-scan>`标签扫描带有DWR注解的类。 3. **配置DWR**:在`dwr.xml`配置文件中,...