Java中的元注解

注解为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用这些数据。

通过使用注解,我们可以将这些元数据保存在Java源代码中,并利用annotation API为自己的注解构造处理工具。注解必须佩戴自己相应的处理器,不然注解没有任何意思!

基本形式

在Java中定义一个注解的基本方式为:

 1 import java.lang.annotation.RetentionPolicy;
 2 import java.lang.annotation.Target;
 3
 4 /**
 5  * Created by liang on 4/22/17.
 6  */
 7 @Target(ElementType.TYPE)
 8 @Retention(RetentionPolicy.RUNTIME)
 9 @Documented
10 @Inherited
11 public @interface UseCase {
12     public int id();
13     public String description() default "no description";
14 }

看到没有几乎和接口的定义一抹一样的!

除了在interface前多个了@外,在注解的定义本身还有几个注解,如: @Target 和 @Retention ,这些定义注解的注解,我们常称为:元注解。

元注解

Java中的元注解专职负责注解其他注解的,用来标示其他注解的适用范围和作用域。

Java中有四个元注解

元注解 描述
@Target
表示该注解可以用于什么地方。可能的ElementType参数包括:

CONSTRUCTOR:构造器的生命

FIELD:域声明(包括enum实例)

LOCAL_VARIABLE:局部变量声明

METHOD:方法声明

PACKAGE:包声明

PARAMETER:参数声明

TYPE:类、接口(包括注解类型)和enum声明

ANNOTATION_TYPE:注解声明(与TYPE的区别?,专门用在注解上的TYPE)

TYPE_PARAMETER:Java8

TYPE_USE:Java8

@Retention
表示需要在什么级别保存该注解信息。可选的RetentionPolicy参数包括:

SOURCE:注解将在编译器丢弃

CLASS:注解在class文件中可用,但会被VM丢弃

RUNTIME:VM将在运行期也保留注解,因此可以通过反射机制读取注解的信息

@Documented 将此注解包含在Javadoc中
@Inherited 允许子类继承父类中的注解

Java8中新增的ElementType例子

@并发编程网的例子

 1 package com.javacodegeeks.java8.annotations;
 2
 3 import java.lang.annotation.ElementType;
 4 import java.lang.annotation.Retention;
 5 import java.lang.annotation.RetentionPolicy;
 6 import java.lang.annotation.Target;
 7 import java.util.ArrayList;
 8 import java.util.Collection;
 9
10 public class Annotations {
11     @Retention( RetentionPolicy.RUNTIME )
12     @Target( { ElementType.TYPE_USE, ElementType.TYPE_PARAMETER } )
13     public @interface NonEmpty {
14     }
15
16     public static class Holder< @NonEmpty T > extends @NonEmpty Object {
17         public void method() throws @NonEmpty Exception {
18         }
19     }
20
21     @SuppressWarnings( "unused" )
22     public static void main(String[] args) {
23         final Holder< String > holder = new @NonEmpty Holder< String >();
24         @NonEmpty Collection< @NonEmpty String > strings = new ArrayList<>();
25     }
26 }

注解处理器

定义了注解,必须有配套的注解处理器,通常都是通过Class对象配合反射机制来处理;网上和各种教科书中很多例子。

参考

Java编程思想

https://race604.com/annotation-processing/

http://ifeve.com/java-8-features-tutorial/

时间: 2024-11-03 03:46:33

Java中的元注解的相关文章

java注解中的元注解

一:java注解中的元注解 四个元注解分别是:@Target,@Retention,@Documented,@Inherited , 再次强调下元注解是java API提供,是专门用来定义注解的注解,其作用分别如下: @Target 表示该注解用于什么地方,可能的值在枚举类 ElemenetType 中,包括: ElemenetType.CONSTRUCTOR----------------------------构造器声明 ElemenetType.FIELD ----------------

JAVA 中的标准注解

Java SE 在 java.lang.annotation  和 javax.annotation 包中定义了大量的注解接口. 其中四个是元注解(红色部分),用于描述注解接口的行为属性,其他的是规则接口,可以用来注解你的源代码中的项. 注 解 接 口 应 用 场 景 目 的 Deprecated 全部 将项标记为过时的 SuppressWarnings 除了包和注解之外的所有情况 阻止某个给定类型的警告信息 Override 方法 检查该方法是否覆盖了某一个超类方法 PostConstruct

Java中的自定义注解

自定义注解的语法要求 定义自定义注解的关键字为@interface 成员以无参无异常方式声明,可以给成员指定一个默认值(default):成员的类型是受限制的,合法的类型有基本数据类型及String,Class,Annotation,Enumeration;如果注解只有一个成员,则必须取名为value(),使用时可以忽略成员名和"=" 注解类可以没有成员,此时称为标识注解 _________________________________________________________

Java中万恶的注解

本文由码农网 – 孙腾浩原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 当Java 1.5引入注解,企业开发者对简化EJB和其他企业产品开发抱有很大期望.可以看一看同一时期的一篇文章用EJB 3.0简化企业Java开发. 然而从那时起,Java企业使用注解出现一些无法预料的后果和副作用,一些甚至到今天都没有被注意到.幸运的是,并非所有的副作用都没有被注意到,来看一些例子,在StackOverflow标题为“Why Java Annotations?”有很多有价值的评论,“Are

Java中常见的注解

1.JDK自带的注解@Override  @Deprecated  @Suppvisewarnings 常见第三方注解 Spring:@Autowired  @Service  @Repository Mybatis:@InsertProvider  @UpdateProvider  @Options 注解的分类: 依照执行机制分: 源代码注解:注解仅仅在源代码中存在,编译成.class文件就不存在了; 编译时注解:注解在源代码和.class文件里都存在(JDK自带的三个注解(@Override

java之 ------ JUnit、注解、类加载器

JUnit软件测试技术(工具) 在项目中建立专门用户测试的包结构. 在Junit中,通过@Test注解,可以运行一个方法(鼠标放在选择要运行的方法名上,单击右键,选择Run As,再选择JUnit Test即可). 这样做的好处就是不用在主代码中添加测试代码,避免了代码的冗余.而且一个测试类,可以测试多项功能,不需要main方法. 一. Junit注解说明 使用了@Test注解应该满足以下条件: 1) 必须是无参数的非静态方法. 2) 添加@Test注解的类,必须拥有一个无参数的公开构造 pac

Java中的APT的工作过程

Java中的APT的工作过程 APT即Annotatino Processing Tool, 他的作用是处理代码中的注解, 用来生成代码, 换句话说, 这是用代码生成代码的工具, 减少boilerplate代码. 我们通过一个简单的例子来简单APT的工作过程, 因为本文demo不设计ide及gradle等, 请注意包名及import问题. 根据上一篇博客Java中的自定义注解, 首先设计一个自定义注解MyAnnotation. package com.example; import java.l

【java】java中的注解(Annotation)是如何工作的?

Java中的注解是如何工作的? 自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分.开发过程中,我们也时常在应用代码中会看到诸如@Override,@Deprecated这样的注解.这篇文章中,我将向大家讲述到底什么是注解,为什么要引入注解,注解是如何工作的,如何编写自定义的注解(通过例子),什么情况下可以使用注解以及最新注解和ADF(应用开发框架).这会花点儿时间,所以为自己准备一杯咖啡,让我们来进入注解的世界吧. 什么是注解? 用一个词就可以描述注解,那就是元数据,即

Java元注解

元注解的作用是负责注解其他注解.Java定义了4中标准的元注解类型,他们被用来提供对其他注解的说明. @target @Retention @Documented @Inherited 这些类型可以和他们所支持的类在Java.lang.annotation包中找到 每个元注解的作用: @target 修饰了annotation所修饰的对象范围,annotation可被用于package,type(类,接口,枚举,annotation),和类型成员(方法,构造方法,成员变量,枚举值).方法参数和本