0

私はdoメソッドを持っているクラスXを持っています。

Xのオブジェクトが作成される別の2つのクラスAとBがあります。

xのdo()がAまたはBによって呼び出されているかどうかを確認する方法はありますか?

do()メソッドでパラメーターを使用したくありません。コールトレースか何かから何か?

私はstruts2、Springを使用しています。だから、フレームワークからの助けはありますか?

AまたはBのどちらから呼び出されたかに基づいて、do()にロジックを実装したいと思います。

4

3 に答える 3

1

そうです、スタックを取得してsThread.getCurrentThread().getStackTrace()を読み取り、A または B と照合することができます (私は、これが param よりも望ましく、空白になるシナリオを想像しようとしていますが、YMMV...)StackTraceElementgetClassName()

于 2012-07-04T02:35:50.640 に答える
1

可能ですが、それを行う必要がある場合は、共有部分の単一のメソッドを呼び出す個別の機能に対して 2 つのメソッドを用意するだけの価値があるかもしれません。

Ascall(...)
  specialStuffA
  commonCall(...)

Bscall(...)
  specialStuffB
  commonCall(...)

commonCall(...)
  commonStuffAB 
于 2012-07-04T02:38:29.503 に答える
0

私はこれが有線に見えることを理解していますが、既存のロジックはこれのために機能するようにすぐにツイートすることができます。

シナリオは、

サービスXを呼び出す2つのアクションAとBがあります。

XはSpringAOPによってインターセプトされてフィルターを追加し、DAOに渡されます。

AがXを呼び出した場合、すべてのデータを表示します。つまり、フィルターを適用しません。BがXを呼び出した場合、ログインしたユーザーのデータのみを表示します。

Xは、他のいくつかのフィルターを追加するためにすでにインターセプトされているため、フィルターをもう1つ追加するのは簡単です。また、このフィルターは中央に存在するため、すべてのAまたはBがXを呼び出し、Xがそれに応じて作業を行います。

私はここではるかに良い方法を見つけました。X内にインスタンス変数があり、AのXのインスタンスは値'a'などになります。

これで、AのXの呼び出しとBのXの呼び出しを区別できるようになります。

それは意味がありますか?

于 2012-07-04T11:12:14.000 に答える