`
kungstriving
  • 浏览: 131878 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java5中的注解功能(Annotation)

    博客分类:
  • Java
阅读更多

注解(Annotation)是Java5中的新特性,一直看到很多项目在使用,但是自己一直不是很了解,现在有机会学习了一下,记录下来,今后用得着。

1.注解可以做什么?

注解将一些系统所需的数据信息(不方便用Java语言来表达),加入到了Java源代码中,而不需要额外的信息提供者。比如配置信息、一些样板文件(接口文件)等。可以通过在代码中添加注解,来直接配置你的系统。

著名的Java单元测试框架Junit-4就是大量使用了注解的功能,加入到了其单元测试中,方面了用户使用JUnit进行测试,用户只需要在想要测试的方法上添加@Test 这样的标签就可以将该方法变为一个单元测试用例。

下面,我将仿照JUnit的测试框架来简单介绍一下注解功能(例子来自于java.sun.com)

2.注解怎么使用

我把注解的使用分为三个步骤:

第一,定义注解

第二,给源程序添加注解

第三,解析注解(实际工作在这里完成)

 

首先看定义注解

 

注解的定义看起来和定义接口差不多,就是在interface关键字前多一个@标签

 

/**
 * Describes the Request-For-Enhancement(RFE) that led
 * to the presence of the annotated API element.
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RequestForEnhancement {
    int    id();
    String synopsis();
    String engineer() default "[unassigned]"; 
    String date();    default "[unimplemented]"; 
}

 其中的id()、synopsis()可以认为是该注解的元素,或者属性,这些方法声明不能有任何参数,或者抛出异常,可以通过default 来定义它的默认值。而且这些类型只能是原语类型、String、Annotation或者这些类型的数组。

最上面的@Target表面了改注解使用的范围(是一个方法还是一个类,或者一个域),@Retention表面了注解可以用在哪个级别上(源代码中、类文件中、还是运行时)

 

这样,便定义了一个注解

 

接下来给源程序添加注解:

 

@RequestForEnhancement(
    id       = 2868724,
    synopsis = "Enable time-travel",
    engineer = "Mr. Peabody",
    date     = "4/1/3007"
)
public static void travelThroughTime(Date destination) { ... }

 

 这样就使用刚才定义的RequestForEnhancement注解,描述了一个方法,可以看见在()中,定义了给该注解的各个元素的参数,就相当于初始化了该注解

 

最后解析注解,这里我们使用一个简单的测试框架来表述

定义一个Test注解,使用在运行时,定义在方法上,它没有任何方法,只是一个标注

在解析程序中,获取该标注,并采取相应动作。在这里,使用了Test标签标注的方法,都将被测试,并形成测试结果。

 

import java.lang.annotation.*;

/**
 * Indicates that the annotated method is a test method.
 * This annotation should be used only on parameterless static methods.
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Test { }

 

添加将被测试的方法:

public class Foo {
    @Test public static void m1() { }
    public static void m2() { }
    @Test public static void m3() {
        throw new RuntimeException("Boom");
    }
    public static void m4() { }
    @Test public static void m5() { }
    public static void m6() { }
    @Test public static void m7() {
        throw new RuntimeException("Crash");
    }
    public static void m8() { }
}

 

在这里用@Test标签标注了m1 m3 m5 m7方法,这些方法将在运行测试用例时被测试。

在该类中运行了测试用例,它使用反射机制,调用了被标注为@Test标签的方法,如果抛出异常则认为测试没有通过,反之则通过。

import java.lang.reflect.*;

public class RunTests {
   public static void main(String[] args) throws Exception {
      int passed = 0, failed = 0;
      for (Method m : Class.forName(args[0]).getMethods()) {
         if (m.isAnnotationPresent(Test.class)) {
            try {
               m.invoke(null);
               passed++;
            } catch (Throwable ex) {
               System.out.printf("Test %s failed: %s %n", m, ex.getCause());
               failed++;
            }
         }
      }
      System.out.printf("Passed: %d, Failed %d%n", passed, failed);
   }
}

 

在这里,可以讲上面的这些类、注解可以和JUnit中的进行一个对比

@Test就是JUnit框架中的@Test

被标注的方法将被测试

RunTest类就相当于手动启动JUnit进行单元测试时运行的org.junit.runner.JUnitCore.runClasses(不是使用IDE启动测试用例,如果使用Eclipse类似的IDE,你可能只是点击一个Run As JUnit)

 

这样,就通过注解完成了一个简单的测试框架

 

详细信息可以查看

http://java.sun.com/j2se/1.5.0/docs/guide/language/annotations.html

分享到:
评论

相关推荐

    Java 注解(Annotation)

    Java 注解(Annotation) - 请认准 ih0qtq

    Java自定义注解Annotation的使用

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

    JAVA注解(Annotation).doc

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

    Java注解(Annotation)全面解析:作用、应用与自定义实践

    Java中的注解(Annotation)是一种特殊的接口,它提供了一种将元数据(metadata)与代码关联的方式。注解可以用于类、方法、变量等代码元素之上,为它们提供额外的信息。注解在Java编程中扮演着重要的角色,它们不仅...

    Java Annotation注解技术

    Java Annotation注解技术是现代Java开发中不可或缺的一部分,它通过提供元数据增强了代码的表达能力,简化了代码的编写和维护,同时也促进了框架和工具的高效开发。了解和掌握注解技术对于提升Java开发的效率和质量...

    Java注解Annotation验证

    Java注解Annotation用起来很方便,也越来越流行,由于其简单、简练且易于使用等特点,很多开发工具都提供了注解功能,不好的地方就是代码入侵比较严重,所以使用的时候要有一定的选择性。 这篇文章将利用注解,来做...

    Java 5 annotation 学习笔记

    Java 5引入的注解(Annotation)是一种元数据,它提供了在代码中嵌入信息的方式,这些信息可以被编译器、JVM或其他工具在编译时或运行时使用。注解可以用来简化代码,提高可维护性,并帮助工具进行静态分析。 1. ...

    java 注解annotation的使用以及反射如何获取注解

    Java注解(Annotation)是Java语言提供的一种元数据机制,用于向编译器或JVM提供额外的信息。这些信息可以用来验证代码、控制代码生成、配置应用等。注解是自Java 5版本引入的特性,它使得程序员可以在源代码中嵌入...

    Java Annotation注解.doc

    在实际开发中,Java注解被广泛用于Spring框架的依赖注入、JPA的实体映射、JSF的UI组件绑定等场景,极大地提高了代码的可维护性和灵活性。然而,对于更复杂的注解使用,如自定义注解生成XML映射文件,需要更深入的...

    spring中自定义注解(annotation)与AOP中获取注解

    通过这种方式,我们可以在AOP中灵活地处理带有自定义注解的方法,实现如日志记录、性能监控、权限验证等多种功能。这不仅提高了代码的复用性,也使得业务逻辑更加清晰。 总结来说,Spring中的自定义注解和AOP的结合...

    Java annotation (JDK5)

    Java注解(JDK5)是Java编程语言中的一个重要特性,自Java 5版本开始引入。注解(Annotation)提供了一种元数据的形式,允许程序员在代码中嵌入额外的信息,这些信息可以被编译器、JVM或者专门的处理工具在编译时或...

    Java.Annotation注解.part4

    Java.Annotation注解.part4

    java注解annotation.rar

    Java注解,也称为 Annotation,是Java编程语言中的一种元数据机制,用于向编译器、JVM(Java虚拟机)或工具提供有关代码的信息。这些信息可以用来进行编译时检查、运行时处理,或者作为配置信息。注解不是程序的一...

    Java 注解Annotation实例上手文档

    ### Java 注解Annotation实例上手文档 #### 一、引言与基础知识 Java注解(Annotation)自JDK 5.0引入以来,已经成为Java语言的重要特性之一,它为代码元数据提供了一种标准化的方式,使得编译器、工具和其他框架...

    Java自定义注解使用反射获取字段注解

    在Java中,注解(Annotation)主要用于编译器检查、代码生成、运行时处理等方面。本文将深入探讨如何通过反射机制来获取自定义注解以及其在字段上的应用。 首先,我们需要了解什么是自定义注解。自定义注解是以`@`...

    Java基础之注解Annotation初入篇_刘永雷

    学习java自定义注解的小例子,处理运行时注解方法,可以结合博客学习,博客地址: http://blog.csdn.net/liuyonglei1314/article/details/59494503

Global site tag (gtag.js) - Google Analytics