`

java注解方式进行反射

    博客分类:
  • JAVA
阅读更多

我的博客网站:http://www.zeromike.net/

本文地址:http://www.zeromike.net/?p=48

反射的一种使用场景是业务代码里有很多不同的方法,通过客户端传入方法名称和参数调用执行业务方法。我这里只写出示意性代码,下篇我会写phonegap插件怎么写。

1.注解代码

 

   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)//说明该注解只能被声明在一个类的方法前
   public @interface MyAnnontion {

   }

 

2.业务代码

public class MyTest {
	@MyAnnontion
	public void sendMessage(String message){
		System.out.println("send Message..."+message);
	}
	@MyAnnontion
	public void findAll(){
		System.out.println("find all...");
	}
}

 

3.测试代码

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

public class MyMain {

	public static void main(String[] args) throws IllegalAccessException,
			IllegalArgumentException, InvocationTargetException {
		Method[] method = MyTest.class.getMethods();
		MyTest test = new MyTest();
		for (Method m : method) {
			MyAnnontion annotation = m.getAnnotation(MyAnnontion.class);// 获得当前方法注解
			if (annotation != null) {
				int isParam = m.getParameterTypes().length;// 判断是否有参数
				if (isParam == 0) {
					m.invoke(test);
				} else {
					m.invoke(test, new Object[] { "abc" });
				}
			}
		}
	}

}

 

 

结果:

 

find all...

send Message...abc

 

原文链接:http://www.zeromike.net/?p=48

原文作者:zeromike

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics