Java自定义注解和元注解

自定义annotation

先看一个注解实例:

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/*-----------------定义注解--------------------*/
@Retention(RetentionPolicy.SOURCE)//声明注释保留时长
@Target(ElementType.METHOD)//声明可以使用此注解的元素级别类型(如类、方法变量等)
@Documented//表示当标注了NeedRecord注解的对象在被javadoc生成文档时,NeedRecord注解将会被API文档记录
public @interface NeedRecord {//定义注解
    String userName() default "anonymous";//定义注解成员,同时用default声明默认值,如果不想声明默认值,去掉default部分即可
    String value() ;
}
/*------------------使用注解实例1-----------------*/
@NeedRecord("login")
public void login(){
    System.out.println("I'm zenghao ,I'm logining");
}
/*------------------使用注解实例2-----------------*/
@NeedRecord(userName = "zenghao",value = "login")
public void login(){
    System.out.println("I'm zenghao ,I'm logining");
}

除了程序中注释提到的细节外,还有几点是需要注意的:
1. 使用注解的格式为@注解名(key1 = value1,key2 = value2 …..),当以@注解名(thisValue)来标注注解时,thisValue默认对应与注解内的value属性,如果注解内未定义value属性,则会编译出错。
2. 注解属性不能有入参(如value(name)),也不能声明异常(如value() throws Exception)
3. 属性的类型只能为原始类型及其包装类或相应的数组类型,不能是自定义类型,如声明MyClass myClass();则会出现编译错误Invalid type MyClass for the annotation attribute NeedRecord.myClass; only primitive type, String, Class, annotation, enumeration are permitted or 1-dimensional arrays thereof

元注解

上面实例中我们用到的@Retention,@Target,@Documented都是Java预定义的元注解,他们只能在我们自定义注解的时候使用,下面来分析分析这些注解的用法。

1. @Retention

用于声明我们自定义的注解的存活时间,它的属性value有三个对应的值
1. RetentionPolicy.SOURCE:在编译阶段丢弃。这些注解在编译结束之后就不再有任何意义,所以它们不会写入字节码。@Override, @SuppressWarnings都属于这类注解。
2. RetentionPolicy.CLASS:默认值,编译器仅把注解保存在class文件中,在运行java程序时,JVM不会保留注释,即不能用反射(在运行期)来获取注释
3. RetentionPolicy.RUNTIME:编译器不仅把注解保存在class文件中,同时在运行java程序时,JVM也会保留注释,即可以通过反射来获取注释


2. @Target

用于指定自定义的注解能够修饰哪些元素,其value属性指明了注解对象,有如下几个值供选择:
- ElementType.TYPE:修饰类、接口或枚举(enum)
- ElementType.FIELD:注解成员变量
- ElementType.METHOD:注解方法
- ElementType.PARAMETER:注解方法参数
- ElementType.CONSTRUCTOR:注解构造函数
- ElementType.LOCAL_VARIABLE :注解局部变量
- ElementType.ANNOTATION_TYPE 注解另一个自定义注解
- ElementType.PACKAGE 注解包

3. @Documented

比如注解A被标注@Documented,B被A标注,则用javadoc对B类生成API文档时,在类声明上会出现注解A记录。

时间: 2024-10-05 23:19:39

Java自定义注解和元注解的相关文章

【Spring】Spring高级话题-组合注解与元注解

转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 进行本示例的演示,需要先配置好Maven和Spring哦. 见: [Spring]基于IntelliJ IDEA搭建Maven 分析 所谓的元注解: 其实就是可以注解到别的注解上的注解. 而被注解的注解我们就称之为组合注解.(仔细理解,可能有点绕) 组合注解同时具备元注解的功能! Spring的很多注解都可以作为元注解,而且Spring本身已经有很多组合注解. 组合注解的好处: 简

java中的元注解

  一.元注解的概念 java中有4个元注解:@Retention.@Target.@Document.@Inherited.所谓元注解就是注解的注解.     二.注解介绍   ①@Retention @Retention--注解的保留位置   注解仅存在于源码中,在class字节码文件中不包含 @Retention(RetentionPolicy.SOURCE)   默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得 @Retention(RetentionPolicy.C

Java中三种简单注解介绍和代码实例_java

简单Java注解 JDK5提供的简单注解类型只有3个. 这三个都是用来预防错误或者进行提醒的,分别是: 1.Override 2.Deprecated 3.Suppresswarnings 需要注意,JDK5(另一个说法,Tiger)实际上并没有许多内置注解;相反,它允许核心Java支持注解特性的能力. JSR-175中严格规定它用来定义元数据功能. 需要由程序员编写自定义的注解类型,其他JSR标准也编写了一系列标准注解类型. 下面将用实例来深入讲解这三个简单注解. Override 注解 Ov

Java编程思想学习笔记——注解

前言 在Android开发的过程中,我们为了减少重复代码的编写,会使用类似ButterKnife,AndroidAnnotations 这类依赖注解库.代码示例如下: //不使用 Button btn = (Button)findViewById(R.id.btn); //使用ButterKnife @Bind(R.id.btn) Button btn; //使用AndroidAnnotations @ViewById(R.id.btn) Button btn; 可以看出通过注解,我们能大量减少

java 自定义注解

要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法. 元注解: 元注解的作用就是负责注解其他注解.Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明.Java5.0定义的元注解: 1.@Target, 2.@Retention, 3.@Documented, 4.@Inherited 这些类型和它们所支持的类在java.lang.annot

java自定义注解接口实现方案_java

java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明.配置的功能. 注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用.包含在 java.lang.annotation 包中. 1.元注解 元注解是指注解的注解.包括 @Retention @Target @Document @Inherited四种. 1.1.@Retention: 定义注解的保留策略 Java代码 复制代码 代码如下: @Retention(RetentionPolicy.SOURCE

浅谈Java自定义注解和运行时靠反射获取注解_java

java自定义注解 Java注解是附加在代码中的一些元信息,用于一些工具在编译.运行时进行解析和使用,起到说明.配置的功能. 注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用.包含在 java.lang.annotation 包中. 1.元注解 元注解是指注解的注解.包括  @Retention @Target @Document @Inherited四种. 1.1.@Retention: 定义注解的保留策略 @Retention(RetentionPolicy.SOURCE) //注解仅

java自定义注解如何使用

问题描述 java自定义注解如何使用 自定义了一个注解类@MyAnnotation,还有解析注解的类. 但是在service里直接添加注解@MyAnnotation到方法上,没有效果,注解没有被解析.请问在web项目里,如何才能扫描到注解,并解析这个注解呢? 解决方案 Annotation(注解)是JDK5.0及以后版本引入的.它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查.注解是以'@注解名'在代码中存在的,根据注解参数的个数,我们可以将注解分为:标记注解.单值注解.完整注解三

java自定义注解实现前后台参数校验的实例_java

其实是可以通过@Constraint来限定自定义注解的方法. @Constraint(validatedBy = xxxx.class) 下面是我做的 java自定义注解实现前后台参数校验 的代码示例 对这个感兴趣的,请好好看,好好学: package sonn.sonnannotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.anno