用反射调用有某个注解的方法,该如何解决
用反射调用有某个注解的方法
我想实现的功能是通过run调用Test注解的不带参数无返回值的方法 为什么不能打印出来 invoke难道没执行么?
RUN类代码如下:
注解代码如下
测试类代码如下
------解决方案--------------------
是不是Test注解类少了@Retention(value=RUNTIME)
------解决方案--------------------
我想实现的功能是通过run调用Test注解的不带参数无返回值的方法 为什么不能打印出来 invoke难道没执行么?
RUN类代码如下:
- Java code
import java.lang.reflect.Method; public class ApplicationRun { public void run(String className) throws Exception { Class<?> classtype = Class.forName(className); Object obj = classtype.newInstance(); Method[] methods = classtype.getMethods(); for(Method method:methods) { if (method.isAnnotationPresent(Test.class)) { method.invoke(obj,new Object[]{}); } } } }
注解代码如下
- Java code
import java.lang.annotation.ElementType; import java.lang.annotation.Target; @Target(ElementType.METHOD) public @interface Test { }
测试类代码如下
- Java code
import java.lang.reflect.InvocationTargetException; public class MyClass { public void method1() { System.out.println("method1"); } @Test public void method2() { System.out.println("method2"); } @Test public int add(int a,int b) { return a+b; } @Test public void doSomething(String str) { System.out.println(str); } @Test public void doSomething2() { System.out.println("doSomething2()"); } public static void main(String[] args) throws Exception { String className = MyClass.class.getName(); ApplicationRun testRun = new ApplicationRun(); testRun.run(className); } }
------解决方案--------------------
是不是Test注解类少了@Retention(value=RUNTIME)
------解决方案--------------------