`

Java 自定义注解

 
阅读更多

 

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

    Java自定义注解实例

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

    java自定义注解接口限流demo

    java自定义注解接口限流demo; java自定义注解接口限流demo; java自定义注解接口限流demo; java自定义注解接口限流demo; java自定义注解接口限流demo; java自定义注解接口限流demo; java自定义注解接口限流demo...

    java自定义注解实践

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

    java自定义注解和通过反射获取注解

    Java自定义注解和通过反射获取注解是Java编程中重要的高级特性,它们极大地增强了代码的可读性和可维护性。注解(Annotation)是一种元数据,提供了在编译时和运行时对代码进行标记的方法,而反射(Reflection)则是...

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

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

    java自定义注解

    Java自定义注解是Java平台提供的一种元编程机制,它允许程序员在代码中插入特定的标记,这些标记可以在编译时或运行时被处理器解析,从而实现特定的功能。自定义注解可以用来增强代码的可读性,简化代码处理,以及...

    Java自定义注解与spring BeanPostProcessor详解

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

    java 自定义注解

    Java自定义注解是Java平台提供的一种元数据机制,它允许程序员在代码中添加额外的信息,这些信息可以被编译器、JVM或其他工具在编译时或运行时读取,用于实现各种功能,如代码生成、代码分析、依赖注入等。...

    实现java自定义注解拦截器.docx

    ### 实现Java自定义注解拦截器 #### 概述 本文主要介绍如何在Spring Boot项目中使用自定义注解来实现对特定方法的拦截功能。具体场景为:当访问项目中的控制器方法时,需要进行“token验证”,但登录等特殊方法...

    java 自定义注解的实例详解

    Java 自定义注解的实例详解 Java 自定义注解是 Java 语言中的一种重要特性,它可以用于创建文档,跟踪代码中的依赖性,并且可以执行编译时期检查。自定义注解可以让开发者根据需要创建自己的注解,以满足特定的需求...

    Java自定义注解md,学习代码

    Java自定义注解是Java语言中的一个重要特性,它允许开发者创建自己的元数据,为代码提供额外的信息,这些信息可以被编译器或者运行时环境用来进行特定的处理。自定义注解可以用于代码的编译检查、代码生成、运行时...

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

    自定义注解是扩展Java功能的强大工具,可以用于实现各种目的,如代码生成、编译时检查、运行时处理等。在这个“自定义注解实现伪动态传参的小demo”中,我们将探讨如何创建一个自定义注解,以允许在注解中传递类似于...

    java 自定义注解例子

    本教程将通过一个超市自动售卖机的例子来详细讲解如何在Java中实现自定义注解。 首先,我们需要了解注解的基本结构。在Java中,注解以`@`符号开头,后面跟着注解的名称。自定义注解的定义类似于接口,但使用`@...

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

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

    JAVA自定义注释类及使用

    对某个类或某个方法进行注释,并且可以通过程序读取该注释来获取方法的用途或描述等。下面给出自定义注释的例子

    java自定义注解\标签库\监听\junit简单测试

    Java自定义注解是Java平台提供的一种元编程机制,它允许程序员在源代码中的任何元素(类、方法、变量等)上添加元数据。自定义注解可以被编译器或者运行时系统用来执行特定的任务,例如代码分析、性能监控、持久化...

    Java自定义注解Annotation的使用

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

Global site tag (gtag.js) - Google Analytics