問題タブ [dynamic-proxy]
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.
java - RMI の動的プロキシ スタブの実装
動的プロキシ スタブの実装が実際に舞台裏でどのように行われているかを理解したいと思います。私が読んだところによると、事前に生成されたスタブ クラスが見つからない場合、リモート オブジェクトがエクスポートされるまでに、RMI ランタイムはスタブとして機能する動的プロキシを生成します。そのスタブは RMI レジストリにバインドされ、後で RMI クライアントからアクセスできます。
問題は、スタブは実際には動的に生成されたプロキシであるため、そのクラス定義はクライアント側では利用できないのに、なぜクライアントは RMI レジストリからスタブを取得できるのでしょうか? バックグラウンドである種の動的なクラスローディングが行われているのでしょうか、それとも RMI はこれを回避するために別の手法を使用していますか?
java - ダイナミック プロキシ クラスとは何ですか? なぜ使用するのですか?
動的プロキシを使用するユースケースは何ですか?
それらはバイトコードの生成とリフレクションにどのように関係していますか?
おすすめの読み物は?
language-agnostic - C# デリゲート、動的プロキシ、クロージャ、および関数ポインタの違いは何ですか?
メソッドまたは関数をデータとして渡す一般的なメソッドの便利な定義は次のとおりです。
- デリゲート
- 閉鎖
- 関数ポインタ
- 動的プロキシによる呼び出しと
- ファーストクラスの方法?
java - 引数を取るコンストラクターで動的プロキシを使用するにはどうすればよいですか?
Sunが プロキシ使用ページに投稿したコードを使用しようとしました。また、DebugProxyを使用して、呼び出されたメソッドを出力しようとしました。重要なのは、プロキシを作成しているオブジェクトには引数が必要です。コンストラクターへの引数を使用してプロキシを作成しようとすると、次のエラーが発生します。
私はこのようなプロキシを作成しました:
プロキシインスタンスを作成し、それでも適切なコンストラクターを呼び出すにはどうすればよいですか?
c# - Hibernate オブジェクトでの動的プロキシの使用
Castle.DynamicProxy2 を使用して、NHibernate 永続クラス内のコードをクリーンアップしようとしています。これがその単純なバージョンです。
ペットクラス:
そしてそのマッピングファイル:
Pet クラスのインスタンスを監査する必要があります。通常、プロパティ Name と Age は自動プロパティではなく、値の変更を記録するロジックが含まれます。現在、プロキシを使用してプロパティ セッター内に監査ロジックを挿入することを考えています。そのために、Auditor IInterceptor を作成しました。
Castle.DynamicProxy2 を使用して Pet クラスの監査済みインスタンスを作成するのは簡単です。
ここで問題が発生します。Pet は永続化されるため、システムは NHibernate を介してフェッチされた Pet のインスタンスで動作する必要があります。私がやりたいことは、NHibernate が次のように Pet プロキシのインスタンスを自動的に返すことです。
私はそれを回避するためにこのようなことを考えました:
キャッシュされProxyHelper.GetProxyType<Pet>()
た Pet プロキシ タイプを返します。主な欠点は、このソリューションが一般的なリスト (例: IList<Pet>
) では機能しないことです。私がクリーンアップしようとしている既存のシステムは、それらを広範囲に利用しています。
だから、誰かが回避策や、私がやっていることが賢明かどうかについての洞察を持っていることを願っています.
どうもありがとう、
カルロス
c# - can you use castle dynamic proxies on web services references?
Is it possible to create a dynamic proxy on the a web service reference that has been added to a visual studio project?
I've added the web service reference in the normal way and tried to create a dynamic proxy using castle to wrap the method invocation in a try/catch to translate any SoapExceptions, but on running it I'm getting a lot of errors around non serializable classes?
has anyone done anything like this?
thanks
.net - WCF クラスの作成をインターセプトする方法
サービス参照を使用していない wcf サービスがあります。クラスとインターフェイスは、両方のクライアント サーバーが参照する dll で定義されます。サーバーとの通信は、ClientBase から派生したクラスを使用します。
INotifyPropertyChanged (城の動的プロキシによって作成された) を実装するサブタイプを提供できるように、クライアント側で wcf の既定のオブジェクトの作成をインターセプトしたいと考えています。
基本的に、 NHibernateが wcf に対してのみINotifyPropertyChanged を実装するクラスを返すのと同じ考え方です。
java - Java動的プロキシのパフォーマンスコスト
多くの最新のフレームワーク(Spring、Hibernate)は、Java動的プロキシを使用して非常に優れた動的動作を提供しますが、それに関連する正確なパフォーマンスコストはどれくらいですか?Sun JVMで利用可能な公開ベンチマークはありますか?
c# - DynamicProxy でインターフェイス メソッドのみをインターセプトする
私はこのようなインターフェースを手に入れました
そのインターフェースを実装し、別のメソッドも持つクラス
そしてインターセプター
IService に存在する Service のメソッドのみをインターセプトしたい (つまり、InterceptedMethod() をインターセプトしたいが SomeMethod() はインターセプトしたくない) が、IProxyGenerationHook からの ShouldInterceptMethod を使用したくない。
このようにできますが、インターフェイスを返すため、このオブジェクトで SomeMethod を呼び出すことはできません
機能することの1つは、仮想を SomeMethod() から削除し、次のようにすることです
しかし、私はこの解決策が好きではありません。
インターフェイスを変更するたびに、ShouldInterceptMethod も変更する必要があるため、IProxyGenerationHook から ShouldInterceptMethod を使用するのは好きではありません。また、いつか誰かがメソッド名をリファクタリングすることができ、メソッドはもうインターセプトされません。
これを行う他の方法はありますか?
c# - UI スレッドへの呼び出しをディスパッチする INotifyPropertyChanged プロキシの作成
別の (非 GUI) スレッドによって変更されたオブジェクトに WinForms コントロールをバインドするための動的プロキシを作成したいと考えています。このようなプロキシは、PropertyChanged イベントをインターセプトし、適切な SynchronizationContext を使用してディスパッチします。
そうすれば、ヘルパー クラスを使用してジョブを実行でき、毎回手動で同期を実装する必要がありません ( if (control.InvokeRequired) etc.
)。
LinFu、Castle、または同様のライブラリを使用してそれを行う方法はありますか?
[編集]
データ ソースは必ずしもリストではありません。任意のビジネス オブジェクトを指定できます。たとえば、次のようになります。
ジョブを実行できるラッパーを作成できます。次のようになります。
(このコードにはいくつかのエラーがあるかもしれません、私はそれを作成しています)
私がやりたいことは、動的プロキシ(Reflection.Emit)を1つのライナーにすることです。
そして、既存の動的プロキシ実装を使用してこのようなことが可能かどうかを知りたかった.
より一般的な質問は次のとおりです。動的プロキシを作成するときにイベントをインターセプトする方法は? プロパティのインターセプト (オーバーライド) については、すべての実装で十分に説明されています。
[編集2]
プロキシが必要な理由 (と思います) は、スタック トレースが次のようになっているためです。
がインスタンスを にBindToObject.PropValueChanged
渡していないことがわかります。Reflector は、sender オブジェクトがどこにも参照されていないことを示しています。つまり、イベントがトリガーされると、コンポーネントはリフレクションを使用して元の (バインドされた) データ ソースのプロパティにアクセスします。sender
PropertyManager
PropertyChanged
イベントのみを含むクラスでオブジェクトをラップした場合 ( Samが提案したように)、そのようなラッパー クラスには、Reflection を介してアクセスできるプロパティは含まれません。