`
chenzhou123520
  • 浏览: 4259290 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自定义Annotation

    博客分类:
  • Java
阅读更多

 

定义简单的Annotation

 

Annotation的定义格式:

 

[public] @interface Annotation名称{
	数据类型 变量名称();
}

 定义一个简单的Annotation

 

public @interface MyDefaultAnnotationNoneParam {
}

 之后就可以直接在程序中使用”@Annotation名称的格式。

 

@MyDefaultAnnotationNoneParam
public class AnnotationTest {
}

 

此时就表示在AnnotationTest类上使用Annotation

还可以在Annotation中设置,使用变量接收参数

 

public @interface MyDefaultAnnotationSingleParam {
	public String value();	//接收设置的内容
}

 

在使用的时候就必需清楚地指明变量的内容

 

@MyDefaultAnnotationSingleParam("陈洲")
public class AnnotationTest {
}

或者也可以使用明确的标记,表示内容赋给哪个参数

 

@MyDefaultAnnotationSingleParam(value="陈洲")
public class AnnotationTest {
}

 

也可以同时设置多个参数

 

public @interface MyDefaultAnnotationMoreParam {
	public String key();
	public String value();
}

 

Annotation在使用的时候需要设置两个参数,一个是key,另外一个是value

 

@MyDefaultAnnotationMoreParam(key="name",value="陈洲")
public class AnnotationTest {
}

也可以使用数组当做Annotation的属性

 

public @interface MyDefaultAnnotationArrayParam {
	public String[] value();
}

 接收的内容本身是一个数组类型,所以要传递数组参数

 

@MyDefaultAnnotationArrayParam(value={"China","America"})
public class AnnotationTest {
} 

 

以上所定义的全部Annotation有一个特点,所有的参数内容需要在使用注释时设置上去,那么也可以为一个参数设置默认的内容,在声明的时候使用default即可。

public @interface MyDefaultAnnotationValue {
	public String key() default "name";		//指定好了默认值
	public String value() default "chenzhou";	//指定好了默认值
} 

 

当再去使用此Annotation时就不用设置值了

 

@MyDefaultAnnotationValue
public class AnnotationTest {
} 

没有设置内容,编译也不会出现任何错误。

 

在操作中,对于一个Annotation而言有时候会固定其取值范围,只能取固定的几个值,那么这个时候实际上就需要依靠枚举。

public enum Names {
	CHENZHOU,GONGYONG,YIXIN,
} 

以后的Annotation取值,只能从这三个值中取走。  

 

public @interface MyDefaultAnnotationEnum {
	public MyName name() default MyName.CHENZHOU;//指定默认值
}

 

 

 

 

此时以上的Annotation已经设置好了一个枚举中的内容作为默认值,那么外部使用此Annotation的时候也需要从枚举固定取值

 

@MyDefaultAnnotationEnum(name=MyName.CHENZHOU)
public class AnnotationTest {
}

 

 

 

RetentionRetentionPolicy

 

Annotation,可以使用Retention定义一个Annotation的保存范围,此Annotation的定义如下:

 

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
    RetentionPolicy value();
} 

 

在以上的Retention定义中存在一个RetentionPolicy类型的变量,此变量用于指定Annotation的保存范围,RetentionPolicy包含三种范围

RetentionPolicy的三种范围

 

No.

范围

描述

1

SOURCE

Annotation类型的信息只会保存在程序源文件中(*.java),编译之后不会保存在编译好的类文件(*.class)之中

2

CLASS

Annotation类型的信息会保存在程序源文件(*.java)和编译好的类文件(*.class)之中,在使用此类的时候,这些Annotation的信息将不会被加载到虚拟机JVM之中,如果一个Annotation声明时没有指定范围,则默认是此范围

3

RUNTIME

Annotation类型的信息会保存在程序源文件(*.java)和编译好的类文件(*.class)之中,在执行时也会加载到JVM

 

 

 在三种范围中,最需要关心的就是RUNTIME范围,因为在执行的时候起作用。

使用Retention指定一个Annotation的范围,范围为RUNTIME

 

@Retention(value = RetentionPolicy.RUNTIME)	//表示此Annotation在运行时有效
public @interface MyDefaultRetentionAnnotation {
	public String name() default "chenzhou";
}

 Annotation可以在运行时起作用

 

内建AnnotationRetentionPolicy

 

  • Override定义采用的是@Retention(value=SOURCE),只能在源文件中出现
  • Deprecated定义采用的是@Retention(value=RUNTIME),可以在执行时出现。
  • SuppressWarnings定义采用的是@Retention(value= SOURCE),只能在源文件中出现

Documented 标记 
这个annotation非常简单,也非常容易理解,使用过javadoc命令的人都会很清楚,我们可以用javadoc命令将方法,类,变量等前面的注释转换成文档,在默认的情况下javadoc命令不会将我们的annotation生成再doc中去的,所以使用该标记就是告诉jdk让它也将annotation生成到doc中去,比如

@Documented
public @interface Retention {
    RetentionPolicy value();
} 
 

 

分享到:
评论

相关推荐

    自定义Annotation例子

    自定义Annotation允许开发者创建自己的注解类型,以满足特定的需求或规范,例如记录代码元信息、实现代码生成、运行时检查等。下面我们将深入探讨自定义Annotation的例子及其相关知识点。 首先,了解如何定义一个...

    2个案例 自定义annotation进行查询对象封装 itext 打印案例

    在IT行业中,自定义注解(Annotation)是Java编程语言中的一个重要特性,它允许程序员在代码中嵌入元数据,增强了代码的可读性和可维护性。这些元数据可以被编译器或运行时环境用来执行特定的任务,例如代码分析、...

    自定义Annotation注解

    本教程将通过一个简单的自定义Annotation注解示例——`CustomAnnotationDemo`,帮助新手了解如何创建和使用自定义注解。 首先,让我们看看如何定义一个自定义注解。在Java中,注解的定义使用`@interface`关键字。...

    Spring Boot+Redis+拦截器+自定义Annotation如何实现接口自动幂等.docx

    Spring Boot+Redis+拦截器+自定义Annotation实现接口自动幂等 在实际的开发项目中,一个对外裸露的接口往往会濒临无数次哀求,我们来说明一下幂等的概念:随意多次执行所产生的影响均与一次执行的影响相同。根据这...

    自定义的Annotation

    总结一下,自定义Annotation的关键步骤包括:创建一个遵循`MKAnnotation`协议的类,重写`mapView(_:viewFor:)`以定制视图,处理点击事件,以及将Annotation添加到地图上。通过这些步骤,开发者可以自由地在地图上...

    Java自定义注解Annotation的使用

    ### Java自定义注解Annotation的使用 #### 1. 前言 自从JDK 1.5引入了注解这一特性以来,它已经成为Java开发中的一个重要组成部分。注解最初是为了推动EJB 3.0的普及和发展而设计的,其目的是减少配置文件的使用,...

    自定义annotationProcessor

    在本主题中,我们将深入探讨如何创建和使用自定义的`annotationProcessor`,以及它在IDEA中的应用。 首先,让我们了解什么是`annotationProcessor`。`annotationProcessor`,也称为注解处理器,是在Java编译过程中...

    Spring Boot自定义Annotation实现接口自动幂.zip

    计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习...

    Springboot+redis+Interceptor+自定义annotation实现接口自动幂等

    【接口幂等性概念】 接口幂等性是软件设计中的一个重要原则,它指的是一个接口被多...Spring Boot结合Redis和自定义Interceptor,能够有效地确保接口幂等性,防止重复处理和数据不一致,从而提高系统的稳定性和可靠性。

    Annotation技术

    自定义Annotation实际上自动继承了`java.lang.annotation.Annotation`接口,但不能继承其他Annotation类型或接口。这使得Annotation成为一种单继承的类型。 总之,Annotation技术是Java编程中的一个强大工具,它...

    Spring MVC Annotation验证的方法

    本文将详细介绍 Spring MVC Annotation验证的方法,包括使用 Spring MVC 自带的 Annotation 验证和自定义 Annotation 验证。 一、Spring MVCAnnotation 验证简介 Spring MVC 框架提供了多种Annotation来实现验证,...

    Java实战篇:设计自己的Annotation

    本文将重点介绍Java 1.5及以后版本中内置的三种常用注解类型及其应用方式,并进一步探讨如何自定义Annotation。 **1.1 @Override 注解** - **定义**:`@Override`注解用于标记重写(override)父类的方法。它只...

    重难点之JavaAnnotation手册.pdf

    通过自定义Annotation和对应的处理器,开发者可以构建出更智能、更安全的工具链,甚至可以替代一些传统的代码生成工具,如XDoclet。了解和熟练掌握Annotation的使用,对于提升Java开发效率和代码质量至关重要。

    JavaAnnotation手册.pdf

    2. 自定义Annotation:自定义Annotation需要定义一个接口,这个接口就是Annotation类型。通过定义成员变量(通常带有默认值),可以为Annotation添加特定的元数据。自定义Annotation可以通过`@interface`关键字创建...

    java8源码-APTDemo:自定义AnnotationProcessor处理自己的Annotation

    @Target:用于描述注解的使用范围,如果自定义注解不存在@Target,则表示该注解可以使用在任何程序元素之上。接收参数ElementType,其值如下: /**接口、类、枚举、注解**/ ElementType.TYPE /**字段、枚举的常量**/...

    JavaAnnotation手册[借鉴].pdf

    自定义Annotation通常需要与Annotation处理器配合,如Java的Apt工具,它可以扫描源代码,根据Annotation执行相应操作,例如验证非空约束。 四、Annotation的应用场景 - **编译时检查**:如`@NonNull`可以提示...

    Annotation使用手册

    自定义 Annotation 的创建涉及到定义 Annotation 类型和实际使用 Annotation。定义 Annotation 类型时,使用 `@interface` 关键字: ```java public @interface MyAnnotation { String value() default ""; } ``` ...

    Annotation手册

    5. **自定义Annotation**:从Java 6.0起,开发者可以创建自己的Annotation类型,定义特定的元信息。这使得开发人员能够创建特定于应用程序的Annotation,用于各种目的,如验证、持久化、事务管理等。 6. **...

Global site tag (gtag.js) - Google Analytics