1

私はリフレクションの概念を学び、「JavaReflectionInaction」の本を読んでいます。「プロキシ」の章から始めたところです。「プロキシは、別のオブジェクト、そのターゲットのインターフェイスをサポートしているため、プロキシはすべての実用的な目的でターゲットの代わりに使用できます」と書かれています。

このプロキシの概念を理解するための実際の簡単な例を教えてもらえますか?

4

2 に答える 2

1

典型的な例はRMIプロキシで、ローカルプロキシオブジェクトでメソッド呼び出しを行うと、別のマシンの別のJVMにあるプロキシオブジェクトでメソッドが呼び出されます。

プロキシを使用すると、呼び出し元はリモートオブジェクトをローカルオブジェクトであるかのように扱うことができます...ほとんどの点で。

于 2012-11-07T10:57:42.297 に答える
1

まあ、プロキシは単なるメカニズムであり、さまざまなことを行うことができ、多くのフレームワークがそれらをさまざまな方法で使用します。

ただし、プロキシを使用できる「従来の」領域は次のとおりです。

  • アクセス制御:呼び出しを傍受し、いくつかの制御チェックを実行します
  • セキュリティ:参照がモジュール間を流れるときに参照をラップ/アンラップして、チェックを実行し、特定のアクションを制限できます
  • 永続性:プロキシのみが使用可能であり、データは別のストレージメディアからオンデマンドでロードされます
  • 遅延読み込み:プロキシは、必要な場合にのみ情報を読み込みまたは計算します
  • 非同期性:プロキシは、後で利用できるようになる結果のハンドルです(いわゆる透過的な未来)
  • リモーティング:プロキシは、オブジェクトがローカルにあるような錯覚を与え、リモート通信を処理します
  • 契約:呼び出しの前後に事前条件と事後条件が満たされていることを確認します
  • AOP:アスペクト指向プログラミングは、メソッド呼び出しをインターセプトする機能に依存しています。そのための1つの手法は、プロキシを使用することです。

注:これらの領域にはいくつかの重複があります。

論文「ECMAScriptReflectionAPIの設計について」では、著者は2つの主要な種類のプロキシを区別しています。

汎用ラッパー。同じアドレス空間で他のオブジェクトをラップするプロキシ。例としては、アクセス制御ラッパー(たとえば、取り消し可能な参照)、高次の契約[Findler and Felleisen 2002]、プロファイリング、汚染追跡などがあります。

仮想オブジェクト。エミュレートされたオブジェクトが同じアドレス空間に存在する必要なしに、他のオブジェクトをエミュレートするプロキシ。例としては、リモートオブジェクトプロキシ(他のアドレス空間のオブジェクトをエミュレートする)、永続オブジェクト(データベースに格納されているオブジェクトをエミュレートする)、透過的なフューチャー(まだ計算されていないオブジェクトをエミュレートする)、遅延インスタンス化されたオブジェクト、テストモックアップなどがあります。

私が前に説明した領域を多かれ少なかれカバーしていると思います。しかし、リストは完全ではありません。プロキシの固定ケースはありません。これは一般的なメカニズムまたは原則です。

于 2012-11-07T11:00:11.620 に答える