Java注解(自定义方法注解使用及测试)
2013-05-11 15:00
796 查看
目标,创建一个方法注解,我们能够初始化时执行该方法,并可以给该方法传入注解的参数值
假设我们设计一个 sayHello(String name) 方法,给该方法做个注解,初始时使用注解传入"小明"
定义注解
我们的测试类
执行的注解方法的操作类
假设我们设计一个 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 ""; } }
相关文章推荐
- JAVAWEB开发之Servlet3.0新特性的使用以及注解的详细使用和自定义注解的方法、动态代理的使用、利用动态代理实现细粒度的权限控制以及类加载和泛型反射
- JAVA 自定义注解在自动化测试中的使用
- JAVA 自定义注解在自动化测试中的使用
- java注解的使用方法
- Spring 使用注解注入,调用类实例出现 java.lang.NullPointException 问题的解决方法
- java 注解的几大作用及使用方法详解(完)
- java 注解的几大作用及使用方法详解
- Spring boot异常统一处理方法:@ControllerAdvice注解的使用、全局异常捕获、自定义异常捕获
- 在Jmeter中使用自定义编写的Java测试代码
- JAVA 注解的几大作用及使用方法详解
- 在Jmeter中使用自定义编写的Java测试代码
- java 注解的几大作用及使用方法详解(完)
- java元注解和自定义注解的使用方法
- JAVA 注解的几大作用及使用方法详解
- java --自定义注解的使用
- java 注解的几大作用及使用方法详解
- java使用自定义注解
- JAVA注解的几大作用及使用方法详解
- 在Jmeter中使用自定义编写的Java测试代码
- java 注解的几大作用及使用方法详解