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

Annotation入门

阅读更多

转载自:http://www.iteye.com/topic/234330

 

2.注释
2.1 什么是元数据
2.2 JDK中内置的注释.
2.3 自定义注释
2.3.1 注释的种类
2.3.2 适用的位置
2.3.3 关于参数列表

最近一段时间在整理关于JDK5新特性的资料.发出来与各位分享.如果哪里有问题请指正.谢谢

2.1 什么是元数据:元数据被描述为定义数据的数据.比如我拍一张照片.照片本身是我需要的主体数据.但如果我想知道这张照片是什么时候拍摄的那我的数码相机可以帮我添上年月日时分秒.那对于照片本身来讲这个时间就是描述他的元数据.
JAVA中的元数据(注释)主要用于生成文档,检查代码,或者为运行时需要的功能提供数据.
JAVA中的注释分为两块---数据的提供者数据的使用者
数据提供者就是我们经常使用的方式.比如这样一个注释@Author(name="yh")我们只提供了这样一个数据并不知道程序会拿他来做什么.
数据使用者是分析这些数据并提供操作的家伙.它得到@Author注释.并且可以得到name属性中的数据,然后用于生成文档或者做其他事情.这些对于数据提供者来说完全是透明的.

2.3 自定义注释:
自定义注释长啥样:

Java代码 复制代码
  1. @Target({ElementType.Method})   
  2. @Retention(RetentionPolicy.RUNTIME)   
  3. public @interface MyAnnotation{   
  4.     public String name() default "yh";   
  5. }  
@Target({ElementType.Method})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation{
    public String name() default "yh";
}


简单解释一下上面的注释.
@Target:一个标注注释的注释.也可以说是注释的元数据.作用是标注MyAnnotation的适用地点这里标注为方法.也就是说MyAnnotation只能用于标示方法.
我们看一下Target的声明

Java代码 复制代码
  1. @Documented  
  2. @Retention(RetentionPolicy.RUNTIME)   
  3. @Target(ElementType.ANNOTATION_TYPE)   
  4. public @interface Target {   
  5.     ElementType[] value();   
  6. }  
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
    ElementType[] value();
}


他接受一个ElementType数组作为参数.说明注释的使用范围可以是多个地点.

Java代码 复制代码
  1. @Target({ElementType.METHOD,ElementType.TYPE})  
@Target({ElementType.METHOD,ElementType.TYPE})


我们把MyAnnotation的声明改为即可以使用在方法上也可以用于类.接口.枚举上
下面是ElementType的原码以及各种类所应用的范围;

Java代码 复制代码
  1. public enum ElementType {   
  2.        TYPE, // 适用 class, interface, enum   
  3.        FIELD, // 适用 field   
  4.        METHOD, // 适用 method   
  5.        PARAMETER, // 适用 method 上之 parameter   
  6.        CONSTRUCTOR, // 适用 constructor   
  7.        LOCAL_VARIABLE, // 适用区域变量   
  8.        ANNOTATION_TYPE, // 适用 annotation 型态   
  9.        PACKAGE // 适用 package   
  10. }  
 public enum ElementType {
        TYPE, // 适用 class, interface, enum
        FIELD, // 适用 field
        METHOD, // 适用 method
        PARAMETER, // 适用 method 上之 parameter
        CONSTRUCTOR, // 适用 constructor
        LOCAL_VARIABLE, // 适用区域变量
        ANNOTATION_TYPE, // 适用 annotation 型态
        PACKAGE // 适用 package
 }


Java代码 复制代码
  1. @Retention(RetentionPolicy.RUNTIME)  
@Retention(RetentionPolicy.RUNTIME)


标示MyAnnotation将被保存到什么时候RetentionPolicy.RUNTIME会告诉编译器.我这个注视要保存到CLASS文件中并且我会再运行时通过JAVA反射来使用他.
下面是RetentionPolicy的原码以及各种类所应用的范围;

Java代码 复制代码
  1. public enum RetentionPolicy {   
  2.    SOURCE,        //编译器处理完Annotation信息后就没事了,也不会被保存在字节码中.   
  3.    CLASS,        //编译器将Annotation储存于class档中.   
  4.    RUNTIME        //编译器将Annotation储存于class檔中,可由JVM读入   
  5. }  
public enum RetentionPolicy {
   SOURCE,        //编译器处理完Annotation信息后就没事了,也不会被保存在字节码中.
   CLASS,        //编译器将Annotation储存于class档中.
   RUNTIME        //编译器将Annotation储存于class檔中,可由JVM读入
}



下面的代码演示了如何在运行时找到注释并得到数据.

Java代码 复制代码
  1. public class MyAnnotationDemo {   
  2.   
  3.     //我想在这里标注作者信息   
  4.     @MyAnnotation(name = "JE")  //如果不写参数默认是yh,这是default地作用   
  5.     public void getAnnotationDemo(){   
  6.   
  7.     }   
  8.   
  9.     public static void main(String[] args) {   
  10.         Class clazz = MyAnnotationDemo.class;   
  11.         Method[] methods = clazz.getMethods();   
  12.         for(Method m : methods) {   
  13.             if(m.isAnnotationPresent(MyAnnotation.class)){   
  14.                 MyAnnotation ann = m.getAnnotation(MyAnnotation.class);   
  15.                 System.out.println("MethodName = " + m.getName());   
  16.                 System.out.println("name = " + ann.name());   
  17.                 System.out.println("ann.age() = " + ann.age());   
  18.             }   
  19.         }   
  20.     }   
  21. }  
public class MyAnnotationDemo {

    //我想在这里标注作者信息
    @MyAnnotation(name = "JE")  //如果不写参数默认是yh,这是default地作用
    public void getAnnotationDemo(){

    }

    public static void main(String[] args) {
        Class clazz = MyAnnotationDemo.class;
        Method[] methods = clazz.getMethods();
        for(Method m : methods) {
            if(m.isAnnotationPresent(MyAnnotation.class)){
                MyAnnotation ann = m.getAnnotation(MyAnnotation.class);
                System.out.println("MethodName = " + m.getName());
                System.out.println("name = " + ann.name());
                System.out.println("ann.age() = " + ann.age());
            }
        }
    }
}

 

分享到:
评论

相关推荐

    Hibernate Annotation入门

    这就是一个基本的Hibernate Annotation入门示例。通过这种方式,我们可以更方便地管理数据库操作,减少与数据库相关的代码量。同时,由于注解是类型安全的,因此可以降低因配置错误导致的问题。 在实际开发中,你还...

    Java Annotation入门.doc

    Java 注解(Annotation)是Java 5.0版本引入的一种元数据机制,它为代码提供了额外的信息,这些信息可以被编译器、JVM或工具用来执行特定的任务,如代码分析、验证、生成代码等。本文主要介绍了Java注解的基本概念、...

    spring annotation 入门

    ### Spring Annotation 入门 #### 一、Spring 注解概述 Spring 框架自2.0 版本起引入了一系列注解支持,这极大简化了配置管理,并为开发提供了更为简洁灵活的方式。通过注解,可以将业务逻辑与配置分离,减少XML...

    Java+Annotation入门[定义].pdf

    Java注解(Annotation)是Java语言的一个重要特性,它为元数据提供了强大的支持。元数据是关于数据的数据,可以用来提供额外的信息,如代码的解释、编译时或运行时的处理指令等。注解在Java中扮演着代码文档、编译器...

    java annotation入门

    Java 注解(Annotation)是 Java 语言中的一个重要特性,它为程序员提供了元数据,即关于数据的数据。在本文中,我们将深入理解 Java 注解的基本概念、用途、工作方式以及如何使用它们。 首先,让我们了解为什么...

    重难点之JavaAnnotation手册.pdf

    在《Java Annotation入门》之后的这篇《重难点之JavaAnnotation手册》中,作者深入探讨了Annotation的概念、定义以及其在Java开发中的应用。 一、Annotation是什么? Annotation是一种在代码中添加的特殊注解,用于...

    JavaAnnotation手册[借鉴].pdf

    在《Java Annotation入门》的基础上,这篇手册深入探讨了Annotation的定义、使用和功能。 一、Annotation的本质 Annotation提供了一种附加信息到程序元素(如类、方法、变量等)的方式,这些信息被称为元数据。元...

    JAVA annotation入门基础

    Java 注解(Annotation)是 Java 语言中的一个重要特性,它允许程序员在源代码中嵌入元数据(metadata)。元数据是关于数据的数据,不直接影响程序的运行,但可以被编译器或运行时环境用来生成代码、执行验证、实现...

    在Nutz中使用Ioc-Annotation的入门教程

    在Nutz中使用Ioc-Annotation的入门教程 Nutz是一个轻量级的Java开发框架,它提供了强大的IoC(Inversion of Control)容器和AOP(Aspect-Oriented Programming)支持。本教程将引导您了解如何在Nutz中利用Ioc-...

    基于annotation的SpringMVC入门小例子

    **基于Annotation的SpringMVC入门小例子** 在Java Web开发中,SpringMVC是一个非常流行的框架,它使得构建Web应用程序变得更加简洁和高效。本篇将详细介绍如何使用注解(Annotation)来配置和运行一个基本的...

    JSF+Spring+Hibernate(Annotation)

    JSF+Spring+Hibernate(Annotation)的login小实例,建议入门的朋友看看,老鸟就免了,呵呵。环境:SQLSever2000+jdk5.0+spring2.0+hibernate3.2+jsf

    mybatis学习总结:annotation与xml结合示例

    本篇文章将聚焦于MyBatis中的注解(Annotation)与XML配置的结合使用,旨在帮助开发者更深入地理解这一关键特性。 首先,MyBatis允许我们使用注解来简化Mapper接口的定义,无需编写XML映射文件。例如,我们可以在...

    Java开发实战从入门到精通视频教程下载第16章 Annotation.zip

    在本Java开发实战从入门到精通的视频教程中,第16章主要聚焦于Java注解(Annotation)这一核心特性。注解是Java语言提供的一种元数据机制,它为代码提供了额外的信息,这些信息可以被编译器、JVM或者在运行时的工具...

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

    在Java编程中,注解(Annotation)是一种强大的工具,它允许程序员向源代码中添加元数据,这些元数据可以被编译器或运行时环境用于各种目的,如代码分析、验证、生成代码等。自定义注解是Java注解机制的一个重要方面,...

    JAVA基础入门到精通pdf

    13. **注解(Annotation)**:注解是元数据的一种形式,提供了一种安全的方式向编译器和JVM传递信息,用于代码的编译、部署、运行时检查等。 14. **Java标准库**:Java标准库(Java API)包含大量预先定义的类和...

    第18章 给编译器看的注释──Annotation(注解)

    JAVA 从入门到精通 第18章 给编译器看的注释──Annotation(注解).ppt

    Maven+SpringMVC的入门级HelloWorld实例

    在IT行业中,Maven和SpringMVC是两个非常重要的组件,它们分别是项目管理和Web应用程序开发的核心...通过这个入门级的HelloWorld实例,我们可以快速理解这两个工具的基本用法,为进一步深入学习和实践打下坚实的基础。

Global site tag (gtag.js) - Google Analytics