`
ican
  • 浏览: 6946 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

annotation入门

阅读更多

第一部分:了解一下java1.5起默认的三个annotation类型:

Jdk1.5引入了一种原语言工具,叫“annotation”。Annotation提供的信息不是程序的一部分,例如代码片断的作者,或者告诉编译器忽略特定的错误等,annotation不会对程序的运行产生任何影响。

Annotation的形式为:@annotation。它可以被应用到类,属性,方法等的声明处。Annotation位于他们之前,并且(通常)独立一行。它还可以带有参数,例如:
    @Author("MyName")
    class myClass {}
或者
    @SuppressWarnings("unchecked")
    void MyMethod() {}

Java1.5自带的三个annotation类型:
1
@Override

只能用在方法之上的。表示一个方法声明打算重写超类中的另一个方法声明。如果方法利用此注释类型进行注解但没有重写超类方法,则编译器会生成一条错误消息。

代码清单:

@Target(ElementType.METHOD)

@Retention(RetentionPolicy.SOURCE)

public @interface Override {}

2@Deprecated

@Deprecated 注释的程序元素,不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。在使用不被赞成的程序元素或在不被赞成的代码中执行重写时,编译器会发出警告。

代码清单:

@Documented

@Retention(RetentionPolicy.RUNTIME)

public @interface Deprecated {}

3@SuppressWarnings

指示应该在注释元素(以及包含在该注释元素中的所有程序元素)中取消显示指定的编译器警告。注意,在给定元素中取消显示的警告集是所有包含元素中取消显示 的警告的超集。例如,如果注释一个类来取消显示某个警告,同时注释一个方法来取消显示另一个警告,那么将在此方法中同时取消显示这两个警告。

根据风格不同,程序员应该始终在最里层的嵌套元素上使用此注释,在那里使用才有效。如果要在特定的方法中取消显示某个警告,则应该注释该方法而不是注释它的类。

代码清单:

@Target({TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE})

@Retention(RetentionPolicy.SOURCE)

public @interface SuppressWarnings {

    String[] value();

}

对以上三个annotation的类型使用举例:

import java.util.List;
class Food {}
class Hay extends Food {}
class Animal {
    Food getPreferredFood() {
        return null;
    }
    /**
     * @deprecated document why the method was deprecated
     */
    @Deprecated
    static void deprecatedMethod() { }
}
class Horse extends Animal {
    Horse() {
        return;
    }
    @Override
    Hay getPreferredFoods() /* The method getPreferredFoods() of type Horse must override a                       superclass method   Horse.java*/
        return new Hay();
    }
    @SuppressWarnings("deprecation")
    void useDeprecatedMethod() {
        Animal.deprecateMethod(); //deprecation warning - suppressed
    }
}

 

第二部分:了解annotation的概念,设计自己的annotation.

1、  首先在jdk自带的java.lang.annotation包里的几个类源文件

A、Documneted的源文件:

@Documented

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.ANNOTATION_TYPE)

public @interface Documented {

}

指示某一类型的注释将通过 javadoc 和类似的默认工具进行文档化。应使用此类型来注释这些类型的声明:其注释会影响由其客户端注释的元素的使用。如果类型声明是用 Documented 来注释的,则其注释将成为注释元素的公共 API 的一部分。

   

源码解读:其中的@interface是一个关键字,在设计annotations的时候必须把一个类型定义为@interface,而不能用classinterface关键字

   

BInherited的源文件

@Documented

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.ANNOTATION_TYPE)

public @interface Inherited {}

功能描述:指示注释类型被自动继承。如果在注释类型声明中存在 Inherited 元注释,并且用户在某一类声明中查询该注释类型,同时该类声明中没有此类型的注释,则将在该类的超类中自动查询该注释类型。此过程会重复进行,直到找到此 类型的注释或到达了该类层次结构的顶层 (Object) 为止。如果没有超类具有该类型的注释,则查询将指示当前类没有这样的注释。

注意,如果使用注释类型注释类以外的任何事物,此元注释类型都是无效的。还要注意,此元注释仅促成从超类继承注释;对已实现接口的注释无效。

 

B、 Retention的源码

@Documented

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.ANNOTATION_TYPE)

public @interface Retention {

    RetentionPolicy value();

}

功能说明:指示注释类型的注释要保留多久。如果注释类型声明中不存在 Retention 注释,则保留策略默认为 RetentionPolicy.CLASS

只有元注释类型直接用于注释时,Target 元注释才有效。如果元注释类型用作另一种注释类型的成员,则无效。

在上面的文件用到RetentionPolicyElementType两个子段,这两个子段的说明如下。

A)、RetentionPolicy

源码文件:

public enum RetentionPolicy {

    SOURCE,

   CLASS,

    RUNTIME

}

功能描述:注释保留策略。此枚举类型的常量描述保留注释的不同策略,他们与Retention元注释一起使用,以指定保留多长的注释。

SOURCEAnnotation类型的信息只会保留在程序源码里,源码如果经过了编译之后,Annotation的数据就会消失

CLASSAnnotation类型的信息保留在程序源码里,同时也会保留在编译好的.class文件里面,在执行的时候,并不会把这一些信息加载到虚拟机(JVM)中去。

RUNTIME:表示在源码、编译好的.class文件中保留信息,在执行的时候会把这一些信息加载到JVM中去的

 

BElementType

源码文件:

public enum ElementType {

TYPE, //类型 TYPE(类型)是指可以用在Class,Interface,EnumAnnotation类型上

       FIELD,//属性

        METHOD,//方法

        PARAMETER,//参数

        CONSTRUCTOR,//构造函数

        LOCAL_VARIABLE,//局部变量

        ANNOTATION_TYPE,

        PACKAGE//注释类型声明

    }

功能描述:序元素类型。此枚举类型的常量提供了 Java 程序中声明的元素的简单分类。 这些常量与 Target 元注释类型一起使用,以指定在什么情况下使用注释类型是合法的。

 

第三部分:下面设计一个自己最简单的Annotation例子,这一例子共用四个文件

1Description的代码清单:

package annotation2;

 

import java.lang.annotation.*;

/*

说明:所有的Annotation会自动继承java.lang.annotation这一个接口,所以不能再去继承别的类或是接口.

最重要的一点,Annotation类型里面的参数该怎么设定:

第一,只能用public或默认(default)这两个访问权修饰.例如,String value();这里把方法设为defaul默认类型.

第二,参数成员只能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和 String,Enum,Class,annotations等数据类型,以及这一些类型的数组.例如,String value();这里的参数成员就为String.

第三,如果只有一个参数成员,参数名称一定要为"value",后加小括号.:上面的例子就只胡一个参数成员.

 */

 

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface

分享到:
评论

相关推荐

    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中扮演着代码文档、编译器...

    Annotation 入门介绍

    ### Annotation在Java 1.5中的入门介绍与应用 #### 背景知识与概念引入 自Java 5.0版本起,Sun Microsystems(现Oracle)引入了一项新特性——Annotation(注解),这一功能旨在简化开发过程中的元数据管理,并...

    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)。元数据是关于数据的数据,不直接影响程序的运行,但可以被编译器或运行时环境用来生成代码、执行验证、实现...

    java annotation 从入门到精通 包含实例

    Java注解(Annotation)是自Java 5.0版本引入的一种元数据机制,用于向编译器、虚拟机或其他工具提供有关代码的附加信息。这些信息不直接影响代码的执行,但可以被编译器或工具用来进行代码分析、验证或生成额外的...

    在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