3

これが私のコードの例です:

class foo extends afoo{

    @HTTPPost
    returnClass runTransaction(RequestData req){
        return sendData(req, returnClass.class)
    }

    @HTTPGet
    returnClass runTransaction2(RequestData req){
        return sendData(req, returnClass.class)
    }
}


abstract class afoo {

public <T> T sendData(ARestMessage req, Class<T> returnClassType)
    //here i need the annotation of the calling method
}

基本的に、私はかなり複雑なメッセージングシステムを構築しており、可能な限り多くの切り替えと構成をアノテーションに入れたいと思っています。

はい、これを簡単にするライブラリがいくつかあることは知っていますが(Googleリフレクションなど)、それらを使用するには、4〜6か月の事務処理とエンタープライズアーキテクチャとのミーティングを行って、使用の承認を得る必要があります。 。プロジェクトは2ヶ月で完了するはずです。私は手作業でやっています。

つまり、私が行っているのは、開発者がメソッドに注釈を付けて、結果のサービスがデータの送信を期待している方法を示すことができる注釈を作成することです。これは、get、post、putなどである可能性があります。すべてのサービスクラスが拡張する抽象クラス内には、senddataメソッドがあります。そのメソッドは、それを呼び出すために使用されたメソッド(別名、runTransactionまたはrunTransaction2)を把握できる必要があるため、sendDataはそのメソッドのアノテーションをプルし、データをサービスに送信する方法を正確に把握します。

これを見つけました(これは私のsendDataメソッドのコードの最初の行です)

final Method callingMethod = this.getClass().getEnclosingMethod();

しかし、それはnullを返し続けます。javadocを数回読んだのですが、なぜnullが返されるのかわかりません。

スタックを使用して親の呼び出し元を取得できることは理解していますが、このアプリケーションは、大量のAOP作業を行う別のアプリケーションとアプリサーバーのメモリを共有しているため、そうしないことをお勧めします。そのAOP作業は、意図しない方法でスタックを台無しにするのに非常に優れているので、私はむしろストレートリフレクションを使用してこれを解決したいと思います。

このメソッドがnullを返し続ける理由を誰かが知っていますか?それは、私のfooクラス自体ではなく、抽象クラスに含まれているためですか?私が使いたいテクニックを使ってこれを達成する方法はありますか?

ありがとう

4

2 に答える 2

0

ここで注釈を使用する意味はありません。別の引数を method に渡すだけsendData()です。

于 2013-02-22T22:43:37.390 に答える