`
tkiicpp
  • 浏览: 83226 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Java Annotation之介绍篇

阅读更多

JAVA从J2SE5开始提供名为annotation(注释,标注)的功能。Java的annotation,可以附加在package, class, method, field等上面,相当于给它们添加了额外的辅助信息。附加在package, class, method, field等上的Annotation,如果没有外部解析工具等对其加以解析和处理的情况,本身不会对Java的源代码或class等产生任何影响,也不会对它们的执行产生任何影响。

但借助外部工具,比如javac,EJB容器等,可以对附加在package, class, method, field的annotation进行解析,可以根据annotation而做出相应的处理,比如运行时改变对象/方法的行为。

Java标准Annotation

@Deprecated 相当于Javadoc的@deprecated,被@Deprecated标注的对象class, method等被注明为不推荐使用。主要用于javac等编译工具。
@Override 注明对象method重载了父类的方法。javac等编译工具编译时会根据此Annotation判断重载方法是否正确。
@SuppressWarnings 告诉javac等编译器忽略所指定的特定的警告信息。
@Target 被定义的annotation可以附加在那些对象上。
@Retention annotation的作用期间。

Java标准Annotation的使用

@Deprecated:

<script src="http://www.lifevv.com/images/code/js/shCore.js" type="text/javascript"></script><script></script><script src="http://www.lifevv.com/images/code/js/shBrushJava.js" type="text/javascript"></script>
  1. @Deprecated  
  2. public class TestBean {  
  3.     …  
  4. }  
@Deprecated
public class TestBean {
    …
}



@SuppressWarnings

  1. @SuppressWarnings("serial")  
  2. public class TestBean implements java.io.Serializable {  
  3.     …  
  4. }  
  5.   
  6. @SuppressWarnings(value = {"serial""unchecked"})  
  7. public String doSth() {  
  8.     …  
  9. }  
@SuppressWarnings("serial")
public class TestBean implements java.io.Serializable {
    …
}

@SuppressWarnings(value = {"serial", "unchecked"})
public String doSth() {
    …
}




@Override

  1. @Override  
  2. public String doSth() {  
  3.     …  
  4. }  
@Override
public String doSth() {
    …
}



Annotation的定义

定义方法:
@interface Annotation名 {定义体}

定义例1:

  1. public @interface MyAnnotation {}  
public @interface MyAnnotation {}


该例定义了一个无任何属性/方法的Annotation。

定义例2:

  1. public @interface MyAnnotation {  
  2.     public String value();  
  3. }  
public @interface MyAnnotation {
    public String value();
}


该例定义了只有一个方法为value()的Annotation。一般来说,只有一个方法的Annotation,方法名一定定义为value。

定义例3:

  1. @Retention(RetentionPolicy.RUNTIME)  
  2. @Target(ElementType.METHOD)  
  3. public @interface MyAnnotation {  
  4.     public String value();  
  5.     public String [] multiValues();  
  6.     int number() default 0;  
  7.       
  8. }  
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
    public String value();
    public String [] multiValues();
    int number() default 0;
    
}


该例定义了一个具有多方法的Annotation。并设置其中一个方法number的默认值为0。multiValues 方法定义为数组类型。Annotation定义可以用MetaAnnotation(元注释)修饰。MetaAnnotation有以下2个:
@Retention
@Target

我们将在以下对@Retention与@Target加以说明。

@Retention

@Retention 可以设置为RetentionPolicy类型的值。
例:
@Retention(RetentionPolicy.RUNTIME)

RetentionPolicy的值 说明
RetentionPolicy.CLASS annotation信息将被编译器编译时保存在class文件中,但执行时不会在VM装载。也就是说不能在执行时动态取得annotation信息。未设置@Retention时这将是默认设置值。
RetentionPolicy.RUNTIME annotation信息将被编译器编译时保存在class文件中,执行时也会被VM装载。
RetentionPolicy.SOURCE annotation信息将被编译器编译时舍弃掉。


@Target

@Target表明Annotation可以附加在哪种JAVA元素之上,可以设置为java.lang.annotation.ElementType数组类型的值。
使用例1:

  1. @Target(ElementType.METHOD)  
@Target(ElementType.METHOD)



使用例2:

  1. @Target(value={ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.LOCAL_VARIABLE, ElementType.METHOD})  
@Target(value={ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.LOCAL_VARIABLE, ElementType.METHOD})



ElementType是一个枚举类型,它具有以下定义:

ElementType值 说明
ElementType.ANNOTATION_TYPE 应用于其他注解的元注解
ElementType.CONSTRUCTOR 构造函数
ElementType.FIELD 字段
ElementType.LOCAL_VARIABLE 方法中的本地变量
ElementType.METHOD 方法
ElementType.PACKAGE
ElementType.PARAMETER 方法的参数
ElementType.TYPE 类,接口或者枚举声明
分享到:
评论

相关推荐

    Java Annotation的讲解和例子

    本篇将深入探讨Java注解的基本概念、类型以及如何使用。 一、注解的定义与分类 1. 定义:Java注解是一种特殊的声明,可以附加到类、接口、方法、变量等元素上。它们以`@`符号开头,后跟注解的名称。 2. 分类: -...

    重难点之JavaAnnotation手册.pdf

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

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

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

    JavaAnnotation手册[借鉴].pdf

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

    Java annotation元注解原理实例解析

    在这篇文章中,我们将深入探讨Java annotation的原理和实例解析,包括元注解的定义、种类、生命周期和使用场景等。 元注解的定义 Java中的元注解是指注解的注解,包括 @Retention、@Target、@Documented、@...

    Java实战篇:设计自己的Annotation

    ### Java实战篇:设计自己的Annotation #### 一、Java中的内置Annotation类型介绍 在Java的世界里,Annotation(注解)的应用越来越广泛。本文将重点介绍Java 1.5及以后版本中内置的三种常用注解类型及其应用方式...

    Java注解Annotation验证

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

    Annotation--学习:JDK内建Annotation

    在本篇中,我们将深入探讨JDK内置的Annotation,了解它们的用途、工作原理以及如何在实际开发中应用。 1. **注解的基本概念** 注解是一种特殊类型的声明,可以附加到类、接口、字段、方法、构造器等程序元素上。...

    通过Java annotation以及反射机制实现不同类型通用的数据库访问接口

    在Java编程中,注解(Annotation)和反射(Reflection)是两个非常强大的工具,它们能够帮助我们实现更灵活、更具动态性的代码。本篇将详细探讨如何利用这两者来实现一个通用的数据库访问接口,以适应不同类型的...

    Java Annotation注解

    本篇将深入探讨Java Annotation注解的相关知识点。 1. **注解类型**: Java提供了三种类型的注解:源码级注解、编译器级注解和运行时注解。源码级注解在编译后不保留,只用于源码阶段;编译器级注解会影响编译过程...

    Java实战篇:设计自己的Annotation.pdf

    ### Java实战篇:设计自己的Annotation #### 一、概述 在Java编程中,注解(Annotation)作为一种元数据,能够为代码提供额外的信息,并且在编译时或运行时可以被处理工具读取和利用。自Java 1.5版本引入以来,...

    java私塾跟我学系列-java篇

    9. **反射**:Java反射机制允许在运行时动态获取类的信息并操作类的对象,是Java的重要特性之一。 10. **泛型**:泛型是Java SE 5.0引入的新特性,增强了类型安全,减少类型转换的麻烦。 11. **注解(Annotation)...

    java reflect and annotation programming

    通过实现`javax.annotation.processing.Processor`接口并将其声明在`META-INF/services/javax.annotation.processing.Processor`文件中,可以让Java编译器在编译时自动调用处理器。 总的来说,Java反射和注解编程是...

    Hibernate Annotation 中文文档

    以上是对Hibernate Annotation的简要介绍,深入理解和熟练应用这些注解,将有助于提升你在Java持久化领域的专业技能。对于更详细的用法和高级特性,建议查阅《Hibernate Annotations参考文档-3.20》这份资料,以获取...

    annotation httpClient(annotation类型应用程序设计举例)

    文档由五篇博客组成,说明了如何使用代理技术实现Annotation HttpClient通过,阅读这五篇博客,应该能够大致了解如何实现一个Annotation类型应用的框架。此外,配备了相应的Annotation HttpClient的源码,以供大家...

    annotation(java注解类型,区别)

    本篇文章将深入探讨Java中的注解类型及其区别。 1. **类型注解(Type Annotation)** 类型注解可以在类、接口、枚举、变量、方法和参数类型上使用。它们提供了对类型层次结构的元信息,例如`@NonNull`用于表示参数...

    Java文档五百篇

    此外,文档还会涉及Java的高级特性,如Lambda表达式、Stream API、Optional类、注解(Annotation)等,这些都是Java 8及以后版本引入的新特性,极大地丰富了Java的编程方式。同时,文档也可能会讲解到Java的模块系统...

    Java Annotation Overview详解

    本篇文章将深入探讨Java注解的基本概念、用途以及如何自定义注解。 首先,注解与注释不同,注解是为编译器或工具设计的,而注释则是给人阅读的。Java提供了三个内置的基础注解: 1. `@Override`:这个注解告诉...

    Spring Annotation简介一

    这篇博客将深入探讨Spring Annotation的基础知识,以及如何在实际项目中应用。 Spring Annotation的引入主要是为了解决XML配置的繁琐问题。在传统的Spring应用中,大量的bean配置信息存储在XML文件中,这不仅增加了...

Global site tag (gtag.js) - Google Analytics