package com.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) //该注解被标记在属性上 public @interface TestAnnField { public String value() default ""; }
package com.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) //该注解被标记在方法上 public @interface TestAnnoMethod { String types() default "";//设置默认值后,在使用注解时可以选择性的不写 types属性,如@TestAnnoMethod(username = "cyss") , 只写一个属性 String username() ; }
package com.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) // 用于描述类型, 注释在类上面。 @Target(ElementType.FIELD) FIELD:用于描述域 ,注释在属性上面 /* * 1.CONSTRUCTOR:用于描述构造器 2.FIELD:用于描述域 3.LOCAL_VARIABLE:用于描述局部变量 * 4.METHOD:用于描述方法 5.PACKAGE:用于描述包 6.PARAMETER:用于描述参数 * 7.TYPE:用于描述类、接口(包括注解类型) 或enum声明 */ public @interface TestAnnoType { Class<?> type(); String method();//反回类型只能使用基本数据类型和数组 Class<?>[] args(); String value() default ""; }
package com.annotation; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.Method; @TestAnnoType(args = { Test.class,Test2.class }, method = "getUserAll", type = Test.class) public class Test { @TestAnnField(value = "苹果") private String name; @TestAnnField(value = "sfd") private String age; @TestAnnField(value = "男") private String sex; private String adr; @TestAnnoMethod(username = "cyss") public void methodAnno(){ System.out.println("Method||01"); } @TestAnnoMethod(username = "xxxxxx") public void methodAnno2(){ System.out.println("Method||02"); } public static void main(String[] args){ Test.aminType(); try { Class<Test> c = Test.class; //获取类中指定的属性 Field field = c.getDeclaredField("name"); //判断是否包含此注解 if(field.isAnnotationPresent(TestAnnField.class)){ System.out.println("true"); } Test s = (Test)Class.forName("com.annotation.Test").newInstance(); System.out.println("属性:"+s.name); } catch (Exception e) { System.out.println("NO"); e.printStackTrace(); } } /** * 获取类上注解的值 */ public static void aminType(){ Test test = new Test(); try { Class<Test> c = Test.class; Class classs = Class.forName("com.annotation.Test"); TestAnnoType annoType = (TestAnnoType) classs.getAnnotation(TestAnnoType.class); String methodStr = annoType.method(); Class classType = annoType.type(); Class[] classTypes = annoType.args(); System.out.println("&&"+methodStr); System.out.println("&&"+classType); System.out.println("&&"+classTypes[0]); System.out.println("&&"+classTypes[1]); } catch (Exception e) { e.printStackTrace(); } } /** * 获取方法上注解的值 */ public static void mainMethod() { Test test = new Test(); try { //获取指定方法的注解值 Class<Test> c = Test.class; Method method = c.getMethod("methodAnno", new Class[] {}); TestAnnoMethod anoMethod = method.getAnnotation(TestAnnoMethod.class); String name = anoMethod.username(); System.out.println("methodAnno方法注解值:"+name); //所有方法的注解值 for (Method method2 : c.getDeclaredMethods()) { TestAnnoMethod anoMethod2 = method2.getAnnotation(TestAnnoMethod.class); if (anoMethod2 != null) { System.out.println("方法名:"+method2.getName()+"注解值:"+anoMethod2.username()); } } // 获取方法上的所有注解 Annotation[] annotations = method.getAnnotations(); for (Annotation annotation : annotations) { System.out.println("方法上的所有注解"+annotation); } } catch (Exception e) { e.printStackTrace(); } test.methodAnno(); } /** * 设置属性的值 */ public static void mainFields() { Test test = new Test(); try { Field[] methods = Test.class.getDeclaredFields(); for (Field method : methods) { boolean hasAnnotation = method .isAnnotationPresent(TestAnnField.class); if (hasAnnotation) { TestAnnField value = method .getAnnotation(TestAnnField.class); method.set(test, value.value()); } } } catch (Exception e) { e.printStackTrace(); } System.out.println("||"+test.name); System.out.println("||"+test.age); System.out.println("||"+test.sex); System.out.println("||"+test.adr); } }
相关推荐
在本案例中,作者创建了三个自定义注解,具体细节虽未详述,但我们可以深入探讨一下Java自定义注解的基本概念、创建过程以及如何进行验证。 首先,我们需要理解Java注解的基本原理。注解是一种元数据,它提供了一种...
Java自定义注解是Java语言中的一个重要特性,它允许我们创建自己的元数据,为代码提供额外的信息。在Java中,注解(Annotation)主要用于编译器检查、代码生成、运行时处理等方面。本文将深入探讨如何通过反射机制来...
Java自定义注解是Java编程语言中的一个重要特性,它允许程序员在代码中插入元数据,这些元数据可以被编译器或运行时环境用来执行特定的任务。自定义注解不仅提高了代码的可读性,还简化了代码处理,特别是在框架和库...
java自定义注解接口限流demo; java自定义注解接口限流demo; java自定义注解接口限流demo; java自定义注解接口限流demo; java自定义注解接口限流demo; java自定义注解接口限流demo; java自定义注解接口限流demo...
"java自定义注解实践" Java 自定义注解实践是 Java 语言中的一项重要特性,它可以使开发者自定义注解,以满足不同的需求。在本文中,我们将详细介绍 Java 自定义注解的概念、特点、实现方式及实践应用。 概念 ----...
Java自定义注解和通过反射获取注解是Java编程中重要的高级特性,它们极大地增强了代码的可读性和可维护性。注解(Annotation)是一种元数据,提供了在编译时和运行时对代码进行标记的方法,而反射(Reflection)则是...
在Java编程中,自定义注解(Annotation)是一种强大的元数据机制,允许程序员在源代码中插入信息,这些信息可以被编译器、IDE或运行时环境用来进行各种处理。自定义注解使得代码更加可读,易于维护,并且可以自动化...
Java自定义注解是Java平台提供的一种元编程机制,它允许程序员在代码中插入特定的标记,这些标记可以在编译时或运行时被处理器解析,从而实现特定的功能。自定义注解可以用来增强代码的可读性,简化代码处理,以及...
Java自定义注解和Spring的BeanPostProcessor是Java企业级开发中的两个重要概念,它们在构建灵活、可扩展的应用程序中发挥着关键作用。本文将深入探讨这两个话题,并结合源码分析,帮助开发者更好地理解和应用。 ...
Java自定义注解是Java平台提供的一种元数据机制,它允许程序员在代码中添加额外的信息,这些信息可以被编译器、JVM或其他工具在编译时或运行时读取,用于实现各种功能,如代码生成、代码分析、依赖注入等。...
### 实现Java自定义注解拦截器 #### 概述 本文主要介绍如何在Spring Boot项目中使用自定义注解来实现对特定方法的拦截功能。具体场景为:当访问项目中的控制器方法时,需要进行“token验证”,但登录等特殊方法...
Java 自定义注解的实例详解 Java 自定义注解是 Java 语言中的一种重要特性,它可以用于创建文档,跟踪代码中的依赖性,并且可以执行编译时期检查。自定义注解可以让开发者根据需要创建自己的注解,以满足特定的需求...
Java自定义注解是Java语言中的一个重要特性,它允许开发者创建自己的元数据,为代码提供额外的信息,这些信息可以被编译器或者运行时环境用来进行特定的处理。自定义注解可以用于代码的编译检查、代码生成、运行时...
自定义注解是扩展Java功能的强大工具,可以用于实现各种目的,如代码生成、编译时检查、运行时处理等。在这个“自定义注解实现伪动态传参的小demo”中,我们将探讨如何创建一个自定义注解,以允许在注解中传递类似于...
本教程将通过一个超市自动售卖机的例子来详细讲解如何在Java中实现自定义注解。 首先,我们需要了解注解的基本结构。在Java中,注解以`@`符号开头,后面跟着注解的名称。自定义注解的定义类似于接口,但使用`@...
3、对spring aop认识模糊的,不清楚如何实现Java 自定义注解的 4、想看spring aop 注解实现记录系统日志并入库等 二、能学到什么 1、收获可用源码 2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑...
对某个类或某个方法进行注释,并且可以通过程序读取该注释来获取方法的用途或描述等。下面给出自定义注释的例子
Java自定义注解是Java平台提供的一种元编程机制,它允许程序员在源代码中的任何元素(类、方法、变量等)上添加元数据。自定义注解可以被编译器或者运行时系统用来执行特定的任务,例如代码分析、性能监控、持久化...
### Java自定义注解Annotation的使用 #### 1. 前言 自从JDK 1.5引入了注解这一特性以来,它已经成为Java开发中的一个重要组成部分。注解最初是为了推动EJB 3.0的普及和发展而设计的,其目的是减少配置文件的使用,...