调用带注释的方法而不为所有带注释的方法创建实例

时间:2017-07-20 09:49:10

标签: java annotations invoke instanceof instances

我在一个类中有两个注释说@ annotation_1和@ annotation_2,这意味着我创建了两个实例。 ---如果有任何错误,请更正此声明!

现在,我找到所有使用@ annotation_1或@ annotation_2注释的方法,现在我需要测量每个带注释的方法所花费的时间。

例如,

startTime = System.nanoTime();

现在考虑我需要为每个仅使用@ annotation_1注释的方法测量nanoTime()。所以我使用system.nanotime()来测量在按

调用之前方法所花费的时间
 Object obj = null;
 try {
                    startTime = System.nanoTime();
                    m.invoke(obj);
                }finally{
                    stopTime = System.nanoTime();
                    runTime = BigDecimal.valueOf(stopTime - startTime);
                } 

然后我使用

调用带注释的方法
for(Class<?> currentClass: args){
            List < Method > methods = Arrays.asList(currentClass.getDeclaredMethods());
            for (Method m: methods) {

                Annotation[] annotations = m.getDeclaredAnnotations();

                for (Annotation annotation: annotations) {

                    if ((annotation instanceof annotation_1)) {
                   ... //code to find time by invoking method as given above
                    } else if ((annotation instanceof annotation_2)) {
                       ...//code to find time by invoking method as given above
                    } else
                    {
                        System.err.println("No. definition for annotation :  @"+annotation);
                    }

                }
            }
        }

然后使用“m.invoke(obj)”调用,我需要这样做,因为我可能正在访问使用@ annotation_1注释的非静态方法。即,我需要调用Method1,然后为它找到runTime,然后调用Method3,然后一个接一个地找到它们的runTime。

但你可以看到这个调用创建了两个实例,即@ annotation_1和@ annotation_2,尽管我只考虑了“annotation_1”注释方法。

如何摆脱此调用。是否有另一种方法来调用使用特定注释注释的方法??

提前致谢.... :)

修改:1

检索方法:

{{1}}

Args在运行时获取所有类名。

1 个答案:

答案 0 :(得分:0)

您只需要具有这些方法的Class的一个实例,之后您可以使用该对象来调用任何这些方法。