問題タブ [method-interception]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
450 参照

java - Callable を乗っ取り、call() の前に隠しメソッドを実行する方法

より大きなプロジェクト (HypergraphDB) のいくつかのサブシステムに実装を追加していますが、重要なコードを変更することは避ける必要があります。このプロジェクトには、一部のデータベース操作のトランザクション ブロックを定義する約 70 個の Callable オブジェクトがあります。私はそのデータベースを置き換えており、私の (redis) は、トランザクション ブロックを定義する前に、影響を受けるすべてのキーが必要です。そのため、これらの Callables 内のパーツにアクセスし、call() を実行する直前に何か (「ウォッチ」) を実行する必要があります。

一部の Callable は自明ではなく、その一部については、その Callable で final フィールドを宣言し、それらを呼び出しの「外部」で定義する必要があるため、call() と getHandles() の両方がそれらにアクセスできます。

getHandles メソッドにアクセスできるようにするために、getHandles メソッドだけを持つインターフェースを定義しました。getHandles にアクセスするために、Callable をそのインターフェイスに一時的にキャストできます。IDE ではメソッドが「見える」ようになりましたが、テストする手段がありません。

これはうまくいきますか?

前のコード:

後のコード:

扱えるインターフェース:

}

そして最後に、それが呼び出されている場所:

0 投票する
3 に答える
817 参照

javascript - ハイジャックされたJavaScript配列に関数を追加できますか?

この質問は、Javascriptで配列を宣言するときに従うべきベストプラクティスは何ですか?に関連しています。


クライアントを「DBクーパー」と呼びましょう。最初の要件として、次のコードを他のJavaScriptコードの前に実行する必要があります。

さらに、Cooperでは、カスタム関数を(ハイジャックされたオブジェクトではなく)組み込みオブジェクトに追加する必要がありますArray。たとえば、ハイジャックされていない場合Array、これは次のように実行されます。

どちらが余裕があるでしょう:

ただし、これは最初の要件と互換性がありません。したがって、どのようにしてDBCooperの両方の要件を最もよく満たすことができますか?

注: DBは、ソリューションが彼の要件を満たしていることを確認するためのテストフィドルも作成しました...なんて素晴らしいことでしょう。


更新: チャレンジが好きな人のために:この問題に対するハイジャックできないクロスブラウザソリューションを見つけてみてください。たとえば、 Array、Object、 Array.prototype.constructor、およびObject.prototype.constructorをハイジャックするさらにハイジャックされたテストケース(このBergiを再フォーマットしてくれてありがとう)があります。これまでのところ、これにはブラウザ固有の解決策があるようです(Bergiの回答に関するコメントを参照し、FFでハイジャックする方法を見つけたらお知らせください)が、現時点では不明です。これに対するクロスブラウザソリューション。

0 投票する
1 に答える
725 参照

asp.net-mvc-3 - Autofac と MVC3 を使用したインターセプターの作成

Autofac 経由で接続されるパフォーマンス監視インターセプターを作成する必要があります。残念ながら、これは MVC3 プロジェクト用です。つまり、Autofac 3 は MVC4 とのみ互換性があるため、Autofac 2.6.3 を使用しています。そのため、Autofac.Extras.DynamicProxy2Nuget パッケージは MVC3 と互換性がないため使用できません。

AutofacContrib.DynamicProxy2と互換性のある を見つけましたAutofac 2.6.3。問題は、依存関係間のバージョンの不一致が原因で、Nuget パッケージがインストールされないことです。問題を以下に示します。

  • AutofacContrib.DynamicProxy2
    • 「Autofac (>= 2.4.5.724)」に依存
    • 「Castle.Core (>= 2.5.2)」に依存します。
    • 「Castle.DynamicProxy (>= 2.2.0)」に依存します。
      • 「Castle.Core (= 1.2.0)」に依存します。

次の Nuget パッケージ インストール エラーが発生します。

「Castle.Core 2.5.2」から「Castle.Core 1.2.0」への更新に失敗しました。「Castle.Core 1.2.0」と互換性のある「AutofacContrib.DynamicProxy2」のバージョンが見つかりません

MVC3 と Autofac でメソッド インターセプトを実行するにはどうすればよいですか?

0 投票する
1 に答える
680 参照

java - HttpInvoker 呼び出しを再試行する MethodInterceptor

HttpInvokerリッチ クライアント GUI でSpring Framework を使用しています。インターネット接続に問題が発生し、インターネット接続の障害によってアプリケーションがクラッシュすることがあります。あきらめる前に、失敗したメソッドを数回再試行したいと思います。

これを達成するためにメソッドインターセプターを作成しようとしましたが、次の2番目の呼び出し:

常にRuntimeExceptionラッピング aで爆発しNullPointerExceptionます。

methodInvocation.proceed()このメソッドを複数回呼び出すことはできませんか、それとも何らかのトリックがありますか?

0 投票する
1 に答える
1618 参照

java - Spring ProxyFactoryBean サービスの傍受は一意ではありません

ProxyFactoryBean と MethodInterceptor を使用して複数のサービス インターフェイスをインターセプトする場合、サービス インターフェイスのメソッド名が同じ場合、インターセプターは何らかの理由でサービス インターフェイスを混同します。私の質問は次のとおりです。

1.)単一の ProxyFactoryBean で複数のインターフェースをインターセプトするときに守るべき規則はありますか?

2.)コードのどこが間違っていますか? 「proxyInterfaces」リストで、AnotherService と AService の順序を入れ替えてみましたが、それもうまくいきません。

3.) ProxyFactoryBean を 2 つに分割して問題を解決しました (下部の「回避策」を参照)。それが唯一の解決策ですか、それとも「コード」セクションで説明されているように ProxyFactoryBean を保持できる方法はありますか?

コード:

ProxyFactoryBeanでインターセプトしているサービスがいくつかあります。

次のように「呼び出し」を実装するインターセプタークラス MyInterceptor を使用します。

サービスインターフェイスは次のように宣言されます。

ここで、AService をクラスにオートワイヤーすると、AService の削除機能とテスト機能を使用できると思います。

私のインターセプターでは、「aService.test()」呼び出しは問題なく到着します。ただし、'aService.delete()' 呼び出しは、どういうわけかインターフェイス AnotherService をトリガーします。インターセプターからのコンソール出力は次のとおりです。

回避策: ProxyFactoryBeanを 2 つ に分割し、2 つの個別のインターセプター Bean を使用します (どちらも以前と同じクラスを参照しています)。

さて、この構成は期待される出力を生成します:

0 投票する
1 に答える
1004 参照

java - Guice での複数のメソッド インターセプト

Guice のメソッド インターセプト機能を使用しています。私が知る必要があるのは、次の形式の複数のインターセプターを適切に実装する方法です。

具体的には、両方のインターセプターでproced()の呼び出しがある場合、何が起こるでしょうか? 傍受されたメソッドは 2 回呼び出されますか? それとも、最初のインターセプターのproced()が2番目のインターセプターを呼び出し、それがメソッドを呼び出すのでしょうか? それとも、1 つのインターセプターだけがproced() を持つ必要がありますか?

ありがとう

0 投票する
1 に答える
407 参照

c# - 属性ベースのプロパティ インターセプト。どのように?

すべての Entity インスタンスの一意のキーを生成して返すエンティティの抽象クラスがあります。キーの生成は少しコストがかかり、具体的なエンティティのプロパティ値に基づいています。キー生成に参加しているプロパティを既にマークしているKeyMemberAttributeので、必要なのは、装飾されたプロパティが変更EntityBase.Keyされるたびに = null にすることだけです。KeyMemberAttribute

したがって、次のような基本クラスを取得しました。

次に、具体的なエンティティを次のように実装しました

プロパティ値が変更されるたびKeyMemberAttributeに を に設定する必要があります。EntityBase.Keynull

0 投票する
0 に答える
609 参照

scala - scala でのメソッド呼び出しインターセプト

こんにちは、クラスに送信されるすべてのメソッド呼び出しを反射的に (または別の方法で) インターセプトする方法があるかどうか疑問に思っていました。Dynamic を使用して未知のメソッドをインターセプトできることは知っていますが、クラスで既に定義されているメソッドはどうですか?

メソッドの構文を変更せずにそれを行う方法を見つけたいと思います(アスペクトフレームワークでメソッドをインターセプトするために行われるため)。

私がやりたいことの例として、これを想像してください:

}

0 投票する
1 に答える
818 参照

c# - Postsharp AOP MethodInterception Aspect with async

私のwinformプログラムでは、各コントロールイベントでPostsharpインターセプタークラスを使用して、try/catchブロックの繰り返しを回避しています。

カスタム ポストシャープ メソッド:

この属性を使用します。

これは魅力のように機能しますが、イベントで非同期を使用したいことを知っています。したがって、txtComments_textChanged は次のようになります。

そして、ここで問題が発生します。インターセプターメソッドの try/catch ブロックは、非同期の場合は何もキャッチしません...どうすればよいですか? ありがとう