`
txidol
  • 浏览: 54803 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java注解(自定义方法注解使用及测试)

 
阅读更多

目标,创建一个方法注解,我们能够初始化时执行该方法,并可以给该方法传入注解的参数值

假设我们设计一个sayHello(String name) 方法,给该方法做个注解,初始时使用注解传入"小明"

package annotation;

public class HelloWorldStub {

	@HelloWorldAnnotation(name = "小明")
	public String sayHello(String name) {
		if (name == null ) {
			name = "";
		} 		
		return name + " say hello world!";
	}
}

定义注解

package 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.RUNTIME)//注解会在class中存在,运行时可通过反射获取
@Target(ElementType.METHOD)//目标是方法
@Documented//文档生成时,该注解将被包含在javadoc中,可去掉
public @interface HelloWorldAnnotation {
	
	public String name() default "";
	
}

我们的测试类

package annotation;

import java.lang.reflect.InvocationTargetException;
import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class TestHelloWorldAnnotation {

	@Test
	public void testHello() throws IllegalArgumentException,
			IllegalAccessException, InvocationTargetException,
			SecurityException, NoSuchMethodException, InstantiationException {
		
		//定义操作类
		ParseAnnotationStub parse = new ParseAnnotationStub();
		
		//假设我们知道类HelloWorldStub使用了注解,执行HelloWorldStub中带注解的方法
		//判断是否使用了注解的name()方法,设置name = "小明",并返回"小明 say hello world!"
		String returnValue = parse.parseMethod(HelloWorldStub.class);
		assertEquals("小明 say hello world!", returnValue) ;

	}
}

执行的注解方法的操作类

package annotation;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class ParseAnnotationStub {
	
	//包装了下Java基本的方法反射(范围是带了我们特定注解的方法)
	//传入我们要执行的类型,所以我们时常发现某些框架要我们定义好类查找的范围,或前后缀什么的
	//可以设置返回值为空void 或者Object通用,这里我们为了测试采用String返回值
	public String parseMethod(Class<?> clazz) throws IllegalArgumentException,
			IllegalAccessException, InvocationTargetException,
			SecurityException, NoSuchMethodException, InstantiationException {
		
		//获得该对象
		Object obj = clazz.getConstructor(new Class[]{}).newInstance(new Object[]{});
		
		//变量该对象的方法
		for (Method method : clazz.getDeclaredMethods()) {
			
			//获取方法的注解,这里特定获取方法上@HelloWorld注解
			HelloWorldAnnotation say = method.getAnnotation(HelloWorldAnnotation.class);
						
			//如果@HelloWorld注解不空,即方法有@HelloWorld注解
			if (say != null) {
				
				//这里我们先前定义了   UseHelloWorld.sayHello(String name)方法
				//这里可以从注解中获取值,或者直接运行,或者缓存该对象方法
				String name = say.name();
				return (String)method.invoke(obj, name);
			}
			
		}
		return "";
	}
}








分享到:
评论

相关推荐

    java 自定义注解验证

    `src`目录则是源代码存放的地方,其中可能包含自定义注解的定义以及使用这些注解的代码。 总之,Java自定义注解验证是增强代码规范性和健壮性的有效手段,通过自定义注解可以实现更精细的代码管理和验证。本案例中...

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

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

    Java自定义注解实例

    3. **使用**: 在代码中,可以将自定义注解应用于目标元素,如: ```java public class MyClass { @MyAnnotation(value = "Hello, World!") public void myMethod() { // ... } } ``` ### 三、注解处理器 ...

    java自定义注解接口限流demo

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

    java自定义注解实践

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

    java 自定义注解例子

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

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

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

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

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

    Spring java注解,元注解和自定义注解

    ### Spring Java注解、元注解与自定义注解详解 #### 一、Java注解简介 在深入了解Spring框架中的注解应用之前,我们首先需要对Java注解有一个基本的认识。Java注解(Annotation)是一种元数据,可以为程序代码添加...

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

    Java自定义注解和通过反射获取...总的来说,理解并熟练掌握Java自定义注解和反射的使用,对于提升Java开发者的编程能力和编写高质量代码具有重要意义。通过深入学习和实践,你可以创造出更加优雅和强大的Java应用程序。

    Java 使用注解拼接SQL语句

    综上所述,使用Java自定义注解来拼接SQL语句是一种高效且灵活的编程方式,它可以提高代码的可读性和可维护性,同时减少错误的可能性。然而,也需要权衡其带来的性能影响,并遵循最佳实践来确保代码的质量和安全。

    Java自定义注解Annotation的使用

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

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

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

    java自定义注解

    接下来,我们可以在类、方法、变量等位置使用这个自定义注解: ```java @MyAnnotation(value = "这是个示例") public class MyClass { // ... } ``` 在上述代码中,我们给`MyClass`类添加了`MyAnnotation`注解,...

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

    自定义注解通常用于标记需要特殊处理的方法。例如,创建一个名为`@Cacheable`的自定义注解,用于缓存方法的返回结果: ```java @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface...

    Java使用自定义注解实现函数测试功能示例

    在 Java 中,自定义注解使用 @interface 定义。Annotation 是 Java 5 中引入的一种元数据,用于提供关于程序元素的信息,可以修饰程序中的类、方法、变量、接口等。通常,我们会把 Annotation 放在所有修饰符之前。 ...

    springboot工程自定义response注解、自定义规范化返回数据结构

    在Spring Boot中,可以创建一个自定义注解,例如`@CustomResponse`,用于标记控制器方法,指示该方法应返回特定的数据结构。这个注解通常会包含一些元信息,如状态码、消息等,以便在处理过程中填充到返回结果中。...

    Gradle中如何自定义实现Java注解处理器

    在提供的文件列表中,虽然没有具体的源代码示例,但我们可以假设`annotation`目录可能包含了自定义注解的定义,而`demo`目录可能包含使用这些注解的实际应用。`build.gradle`和`settings.gradle`文件是Gradle项目的...

    java 自定义注解

    以上就是关于Java自定义注解的基本概念、定义和使用方法。通过自定义注解,开发者可以更灵活地扩展Java语言的功能,实现更复杂的编程模式。在实际项目中,自定义注解常用于框架扩展、代码生成、验证规则设定等多种...

Global site tag (gtag.js) - Google Analytics