私はdoメソッドを持っているクラスXを持っています。
Xのオブジェクトが作成される別の2つのクラスAとBがあります。
xのdo()がAまたはBによって呼び出されているかどうかを確認する方法はありますか?
do()メソッドでパラメーターを使用したくありません。コールトレースか何かから何か?
私はstruts2、Springを使用しています。だから、フレームワークからの助けはありますか?
AまたはBのどちらから呼び出されたかに基づいて、do()にロジックを実装したいと思います。
そうです、スタックを取得してsThread.getCurrentThread().getStackTrace()
を読み取り、A または B と照合することができます (私は、これが param よりも望ましく、空白になるシナリオを想像しようとしていますが、YMMV...)StackTraceElement
getClassName()
可能ですが、それを行う必要がある場合は、共有部分の単一のメソッドを呼び出す個別の機能に対して 2 つのメソッドを用意するだけの価値があるかもしれません。
Ascall(...)
specialStuffA
commonCall(...)
Bscall(...)
specialStuffB
commonCall(...)
commonCall(...)
commonStuffAB
私はこれが有線に見えることを理解していますが、既存のロジックはこれのために機能するようにすぐにツイートすることができます。
シナリオは、
サービス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の呼び出しを区別できるようになります。
それは意味がありますか?