`
chinrui
  • 浏览: 98076 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

自定义注解

    博客分类:
  • Java
阅读更多
自定义注解

1、最简单的自定义注解
package annotation;

public @interface HpuAnnotation {
	// 注解相当于一个特殊的类型,与Enum 、 Interface类似
}

2、测试自定义的注解
package annotation;

@HpuAnnotation
public class AnnotationTest {

	public static void main(String[] args) {
		
		// 判断AnnotationTest 是否添加了HpuAnnotation注解
		if(AnnotationTest.class.isAnnotationPresent(HpuAnnotation.class)) {
			// 获取AnnotationTest上面相应的注解 
			HpuAnnotation annotation =
                        AnnotationTest.class.getAnnotation(HpuAnnotation.class);
			// 打印注解信息
			System.out.println(annotation);
		}
	}
}

运行结果 :   不输出任何信息
原因:自定义注解有有三种保留策略:
  • --RetentionPolicy.CLASS    
  • --RetentionPolicy.RUNTIME
  • --RetentionPolicy.SOURCE

java语句执行的过程中包括三个阶段,第一个阶段是源文件阶段,即.java文件阶段;第二个阶段是Class阶段,即由源文件编译形成.class文件;第三个阶段是运行阶段,即由类加载器将.class文件加载进入内存,形成字节码的阶段。而自定义注解的默认保留策略为:class阶段,即.class文件里面有注解的信息,但是将.class文件加载进入内存的时候,会忽略掉注解信息。
If no Retention annotation is present on an annotation type declaration, the retention policy defaults to RetentionPolicy.CLASS.
故在自定义的注解上加上注解@Retention(RetentionPolicy.RUNTIME)设定保留策略后,就可以得到想要的结果了。
运行结果为:@annotation.HpuAnnotation()
3、在自定义注解上添加注解 @Target(value=ElementType.METHOD) 可以设定自定义注解的使用位置
  • --METHOD     只能加在方法上
  • --TYPE        只能加在类上
  • --CONSTRUCTOR    只能加在构造方法上
  • --FIELD     只能加在字段上
  • --LOCAL_VARIABLE    只能加在局部变量上
  • --PACKAGE 加在包上面
  • --PARAMETER 加在参数上面
  • --ANNOTATION_TYPE 注释类型声明

4、给自定义注解添加属性,在注解里面属性的存在形式为方法,属性值与返回值的类型一样。注解里面所有方法的默认类型为public abstract 类型的。如下(给注解添加一个属性color,其值的类型要求是String):
// 注解相当于一个特殊的类型,与Enum 、 Interface类似
@Retention(RetentionPolicy.RUNTIME)
@Target(value={ElementType.METHOD,ElementType.TYPE,ElementType.FIELD})
public @interface HpuAnnotation {
	// 属性名:color 属性值类型:java.lang.String
	String color();
}

测试方法:
@HpuAnnotation(color="red")
public class AnnotationTest {

	public static void main(String[] args) {
		
		// 判断AnnotationTest 是否添加了HpuAnnotation注解
		if(AnnotationTest.class.isAnnotationPresent(HpuAnnotation.class)) {
			// 获取AnnotationTest上面相应的注解 
			HpuAnnotation annotation = AnnotationTest.class.getAnnotation(HpuAnnotation.class);
			// 获取注解中属性的值,获取方式通过调用相应的方法
			System.out.println(annotation.color());
		}
	}
}

设置默认属性值:
// 属性名:color 属性值类型:java.lang.String
String color() default "blue";

当属性名为value的时候,且只需要设定value属性的时候,可以不用写value=,而直接在注解后面写上值即可。
@MetaAnnotation("wcj")


5、属性的多种值类型
自定义枚举类型,用于作为注解属性值类型:
public enum Color {
	RED,GREEN,YELLOW
}

自定义注解类型,用于作为注解属性值的类型:
public @interface MetaAnnotation {
	String value();
}

自定义的多种属性值注解:
// 注解相当于一个特殊的类型,与Enum 、 Interface类似
@Retention(RetentionPolicy.RUNTIME)
@Target(value={ElementType.METHOD,ElementType.TYPE,ElementType.FIELD})
public @interface HpuAnnotation {
	// 属性名:color 属性值类型:java.lang.String
	String color() default "blue";
	// 属性名:enumColor 属性值类型:Enum
	Color enumColor();
	// 属性名:array 属性值类型:int[]
	int[] array();
	// 属性名: annotation 属性值类型:@interface
	MetaAnnotation annotation() default @MetaAnnotation("wcj");
}

测试各种属性值类型:
@HpuAnnotation(enumColor=Color.GREEN,array={1,2,3},annotation=@MetaAnnotation("xy"))
public class AnnotationTest {

	public static void main(String[] args) {
		
		// 判断AnnotationTest 是否添加了HpuAnnotation注解
		if(AnnotationTest.class.isAnnotationPresent(HpuAnnotation.class)) {
			// 获取AnnotationTest上面相应的注解 
			HpuAnnotation annotation = AnnotationTest.class.getAnnotation(HpuAnnotation.class);
			// 获取注解中属性的值,获取方式通过调用相应的方法
			System.out.println(annotation.color());
			// 获取属性值类型为Enum
			System.out.println(annotation.enumColor());
			// 获取属性值类型为int[]
			int[] arr = annotation.array();
			System.out.print("[");
			for(int i = 0; i < arr.length; i++) {
				if(i != arr.length - 1) {
					System.out.print(arr[i] + ",");
				} else {
					System.out.print(arr[i]);
				}
			}
			System.out.println("]");
			// 获取属性值类型为@interface
			System.out.println(annotation.annotation());
		}
	}
}

运行结果:
blue
GREEN
[1,2,3]
@annotation.MetaAnnotation(value=xy)
分享到:
评论

相关推荐

    java 自定义注解验证

    Java 自定义注解验证是Java开发中的一个重要特性,它允许开发者创建自己的元数据,以便在编译时或运行时对代码进行验证和处理。自定义注解为代码提供了额外的信息,使得程序更具可读性、可维护性和灵活性。在本案例...

    实现生成自定义注解的实体类

    在Java编程语言中,自定义注解是一种强大的工具,它允许开发者创建自己的元数据,以提供额外的信息或规范代码的特定行为。自定义注解可以应用于类、接口、方法、变量等不同层级,使得代码更加模块化,易于理解和维护...

    Java自定义注解使用反射获取字段注解

    Java自定义注解是Java语言中的一个重要特性,它允许我们创建自己的元数据,为代码提供额外的信息。在Java中,注解(Annotation)主要用于编译器检查、代码生成、运行时处理等方面。本文将深入探讨如何通过反射机制来...

    excel导入动态校验,自定义注解动态校验

    本文将详细探讨"Excel导入动态校验,自定义注解动态校验"这一主题,旨在帮助你理解和掌握如何在处理Excel数据时进行有效的验证和校验。 首先,Excel导入动态校验是指在将Excel数据导入到系统或数据库时,对数据进行...

    自定义注解实现伪动态传参的小demo

    在这个“自定义注解实现伪动态传参的小demo”中,我们将探讨如何创建一个自定义注解,以允许在注解中传递类似于动态参数的数据。 首先,自定义注解的定义通常以`@interface`关键字开始,我们可以定义一些元素(也...

    自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏

    自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏 自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏 自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏 自定义注解结合Hutool对SpringBoot接口返回...

    自定义注解实现拦截sql.rar

    在Java开发中,自定义注解是一种非常强大的工具,它允许我们为代码添加元数据,以便在运行时或编译时进行处理。本示例中,“自定义注解实现拦截SQL”是关于如何通过注解来动态修改执行的SQL语句,以在其中增加特定的...

    java自定义注解实践

    "java自定义注解实践" Java 自定义注解实践是 Java 语言中的一项重要特性,它可以使开发者自定义注解,以满足不同的需求。在本文中,我们将详细介绍 Java 自定义注解的概念、特点、实现方式及实践应用。 概念 ----...

    spring aop 自定义注解保存操作日志到mysql数据库 源码

    3、对spring aop认识模糊的,不清楚如何实现Java 自定义注解的 4、想看spring aop 注解实现记录系统日志并入库等 二、能学到什么 1、收获可用源码 2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑...

    自定义注解得使用,模拟spring通过注解方式创建bean实例

    本篇将深入探讨如何自定义注解并模拟Spring通过注解方式创建bean实例。 首先,了解注解(Annotation)在Java中的角色。注解是一种元数据,它提供了在源代码中添加信息的方式,这些信息可以被编译器或运行时环境读取...

    java 自定义注解例子

    自定义注解允许开发者创建自己的注解类型,以满足特定项目需求。本教程将通过一个超市自动售卖机的例子来详细讲解如何在Java中实现自定义注解。 首先,我们需要了解注解的基本结构。在Java中,注解以`@`符号开头,...

    spring中自定义注解(annotation)与AOP中获取注解

    在Spring框架中,自定义注解(Annotation)和AOP(面向切面编程)的结合使用,极大地增强了代码的可读性和可维护性。本文将深入探讨如何在Spring中创建自定义注解以及如何在AOP中有效地获取并利用这些注解。 首先,...

    Spring 自定义注解的解析

    在Spring框架中,自定义注解的解析是一个强大的特性,允许开发者根据业务需求创建特定的注解,并在Spring容器启动时自动处理这些注解。本文将深入探讨如何在Spring环境中通过`component-scan`配置来处理自定义Java...

    java(spring boot)自定义注解

    在这个特定的场景中,我们探讨的是如何在Spring Boot应用中自定义注解,以及如何利用这个注解进行系统监控的开发。 首先,让我们理解什么是自定义注解。在Java中,注解(Annotation)是一种元数据,它提供了向...

    Java自定义注解实例

    Java自定义注解是Java编程语言中的一个重要特性,它允许程序员在代码中插入元数据,这些元数据可以被编译器或运行时环境用来执行特定的任务。自定义注解不仅提高了代码的可读性,还简化了代码处理,特别是在框架和库...

    SpringBoot AOP各种注解、自定义注解、鉴权使用案例(免费下载)

    例如,创建一个名为`@Cacheable`的自定义注解,用于缓存方法的返回结果: ```java @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Cacheable { String cacheName() default ...

    Java自定义注解与spring BeanPostProcessor详解

    Java自定义注解和Spring的BeanPostProcessor是Java企业级开发中的两个重要概念,它们在构建灵活、可扩展的应用程序中发挥着关键作用。本文将深入探讨这两个话题,并结合源码分析,帮助开发者更好地理解和应用。 ...

    java自定义注解实现由类自动生成表

    在Java编程中,自定义注解(Annotation)是一种强大的元数据机制,允许程序员在源代码中插入信息,这些信息可以被编译器、IDE或运行时环境用来进行各种处理。自定义注解使得代码更加可读,易于维护,并且可以自动化...

    spring自定义注解样例

    在Spring框架中,自定义注解是一种非常强大的工具,它允许开发者根据具体需求扩展框架的功能。Spring AOP(面向切面编程)是Spring框架的重要组成部分,通过AOP,我们可以实现代码的解耦,提高可维护性和可重用性。...

    自定义注解实现过滤实例

    在Java编程语言中,自定义注解是一种强大的工具,它允许开发者创建自己的元数据,以提供额外的信息给编译器、运行时环境或其他工具。在本案例中,我们讨论的主题是如何利用自定义注解实现过滤实例,特别是结合MySQL...

Global site tag (gtag.js) - Google Analytics