クラス内に2つの注釈があるとします。つまり、@ annotation_1と@ annotation_2は2つのインスタンスを作成したことを意味します。 ---エラーがあればこの文を修正してください!すべての注釈付きメソッドのインスタンスを作成せずに注釈付きメソッドを呼び出す
ここで、@ annotation_1または@ annotation_2で注釈付けされたすべてのメソッドを見つけました。これで、注釈付きメソッドごとの時間を測定する必要があります。
例えば、
@annotation_1
Method1
{
...
}
@annotation_2
Method2
{
...
}
@annotation_1
Method3
{
...
}
Method4
{
...
}
は今、私は、各のみ@ annotation_1でアノテートすべてのメソッドのために()nanoTimeを測定する必要が検討してください。だから私はその後、私は
Object obj = null;
try {
startTime = System.nanoTime();
m.invoke(obj);
}finally{
stopTime = System.nanoTime();
runTime = BigDecimal.valueOf(stopTime - startTime);
}
を使用して注釈付きメソッドを呼び出した後、「m.invoke(OBJ)を使用して呼び出す
startTime = System.nanoTime();
によって起動する前にこの方法を取る時間を測定するために)(System.nanoTimeのを使用します"、@ annotation_1でアノテーションされた非静的メソッドにもアクセスしている可能性があるため、これを行う必要があります。つまり、Method1を呼び出してそれに対応するrunTimeを見つけ、次にMethod3を呼び出してから別々にrunTimeを見つける必要があります。
しかし、この呼び出しでは、@ annotation_1と@ annotation_2の2つのインスタンスが作成されることがわかりましたが、「annotation_1」注釈付きメソッドだけを考えています。
この呼び出しを取り除く方法を教えてください。特定の注釈で注釈付けされたメソッドを呼び出す別のメソッドがありますか?
事前に感謝します.... :)
編集:1
方法を取得するには:
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);
}
}
}
}
Argsのは、実行時のすべてのクラス名を取ります。
メソッドを取得するために使用するコードを掲載してください。 –
@ YazanJaber私は質問を編集しました。どうぞご覧ください... –
ターゲットクラスのインスタンスを複数作成したくない場合は、オブジェクトの1つのインスタンスをキャッシュし、それを後のすべての呼び出しに使用できます? –