私は、(比較的)非侵入型の呼び出しの呼び出しに対する要求と応答のログを行うユーティリティを書きたいと思っていましたが、私はjava-8ラムダ/終わらせる。関数/サプライヤ経由でのラムダ引数へのアクセス
のは、サンプルのクライアント呼び出しのコードがあるとしましょう:
SomeReturn retVal = someObject.doSomething(arg1, arg2);
私のように呼び出すことができるレコーダーユーティリティの書き込みを期待していた。
SomeReturn retVal = Recorder.withRecording(() -> someObject.doSomething(arg1, arg2))
のようなものになりますレコーダー:
をpublic static <R> R withRecording(Supplier<R> call) {
R response = call.get();
// Record the response
return response;
}
しかし、私はリクエスト引数を取得する方法を特定できませんでした。 stオブジェクト)Supplier
から(そして正しく - Supplier
はそれに関係ありません)。私はjava.util.function.Function
でも、彼ら自身が状態を扱わないので、私たちをここで助けないと思う。
我々は他のどのようなオプションがあります
Object withRecording(Object target, Method method, Object[] arguments)
のようなものに頼らず? AOPをソリューションとして使用できることはわかっていますが、AOPを使用せずに実行できるかどうかを見たいと思っていました。
ありがとうございます!
もし可能であっても(私はそれは単に)レコーダーの。その録音を無効にしたり削除したりする日が来たら、あなたは帽子を食べます。あなたが言ったように、これはAOPの完璧なシナリオのように思えます。 – Tunaki