プロキシは、ターゲット オブジェクトにアクセスする別の方法、つまりプロキシ オブジェクトを介してターゲット オブジェクトにアクセスするデザイン パターンであり、ターゲット オブジェクトの実装に基づいて追加機能を拡張できるという利点があります。操作、つまりターゲット オブジェクトの機能を拡張します。
ここではプログラミングの考え方が使用されています。他の人が書いたコードやメソッドを変更しないでください。変更する必要がある場合は、エージェントを通じてこのメソッドを拡張できます。
エージェントの役割を説明するために例を挙げます: スターを招待したいとしますが、直接招待する必要はありません。スターに接続しますが、同じ目的を達成するためにスターのエージェントに連絡します。スターはターゲットオブジェクトです。スターはイベントのプログラムを担当するだけでよく、その他の些細なことはエージェント(エージェント)に任せてください。解決します。これは現実におけるエージェンシー思考の例です。
プロキシ モードの重要な点は、プロキシ オブジェクトとターゲット オブジェクトです。プロキシ オブジェクトはターゲット オブジェクトの拡張であり、ターゲット オブジェクトを呼び出します
静的プロキシ
静的プロキシを使用する場合は、インターフェイスまたは親クラスを定義する必要があります。プロキシ オブジェクトとプロキシ オブジェクトは、同じインターフェイスを実装するか、同じインターフェイスを継承します。
説明する例を次に示します:
保存アクションをシミュレートし、保存アクションのインターフェイス IUserDao.java を定義すると、ターゲット オブジェクトはこのインターフェイスのメソッド UserDao.java を実装します。このとき、静的プロキシ メソッドを使用する場合は、プロキシ オブジェクト (UserDaoProxy.java) に IUserDao インターフェイスも実装する必要があります。呼び出す場合は、プロキシ オブジェクトのメソッドを呼び出して対象のオブジェクトを呼び出します。
プロキシ オブジェクトとターゲット オブジェクトは同じインターフェイスを実装し、同じメソッドを呼び出してターゲット オブジェクトのメソッドを呼び出す必要があることに注意してください
静的プロキシの概要:
1. ターゲット オブジェクトの機能を変更することなく、ターゲットの機能を拡張できます。
2. 欠点:
プロキシのため、オブジェクトはターゲット オブジェクトと同じインターフェイスを実装する必要があるため、プロキシ クラスが多すぎると、クラスが多すぎます。同時に、インターフェイスがメソッドを追加したら、ターゲット オブジェクトとプロキシ オブジェクトを維持する必要があります。
静的プロキシの欠点を解決するにはどうすればよいですか? 答えは次のとおりです。動的プロキシを使用できるということです
動的プロキシ
動的プロキシには次の特性があります:
1. プロキシ オブジェクトではなく、インターフェイスを実装する必要があります
2. プロキシ オブジェクトの生成は、JDK の API を使用してメモリ内にプロキシ オブジェクトを動的に構築することです (プロキシ オブジェクト/ターゲット オブジェクトを作成するインターフェイスのタイプを指定する必要があります)
3動的プロキシ 別名: JDK プロキシ、インターフェイス プロキシ
概要:
プロキシ オブジェクトはインターフェイスを実装する必要はありませんが、ターゲット オブジェクトはインターフェイスを実装する必要があります。それ以外の場合は動的です。プロキシは使用できません
Cglib プロキシ
#上記の静的プロキシ モードと動的プロキシ モードでは、ターゲット オブジェクトがインターフェイスを実装するターゲット オブジェクトである必要がありますが、ターゲットがオブジェクトは単なる別個のオブジェクトであり、実装されていません。どのインターフェイスでも、ターゲット オブジェクトのサブクラスを使用して、この時点でプロキシを実装できます。このメソッドは次のように呼ばれます: Cglib proxy
Cglib proxy、とも呼ばれますサブクラス プロキシはメモリ内に構築されますターゲット オブジェクトの機能を拡張するためのサブクラス オブジェクトです。
JDK の動的プロキシには制限があり、動的プロキシを使用するオブジェクトは 1 つ以上のインターフェイスを実装する必要があります。インターフェイスを実装していないクラスをプロキシしたい場合は、Cglib を使用してこれを実現できます。Cglib は、Java クラスを拡張し、実行時に Java インターフェイスを実装できる強力で高性能のコード生成パッケージです。多くの人によって広く使用されています。 Spring AOP や synaop などの AOP フレームワークは、インターセプト (インターセプト) Cglib パッケージの基礎となるメソッドを使用して、小規模なブロック バイトコード処理フレームワーク ASM を使用してバイトコードを変換し、新しいクラスを生成します。ASM の直接使用は推奨されません。 JVM の内部構造を理解する必要があります。クラス ファイルを含む形式と命令セットはすべておなじみです。
Cglib サブクラス エージェントの実装方法:
1. の jar ファイルcglibの導入が必要ですが、SpringのコアパッケージにはすでにCglib関数が含まれているので、直接spring-core-3.2.5.jar.
2を導入することができ、関数パッケージ導入後は動的にサブクラスを構築することができますメモリ内##3. プロキシ クラスを Final にすることはできません。それ以外の場合はエラーが報告されます##4. ターゲット オブジェクトのメソッドが Final/static の場合、それはインターセプトされません。つまり、追加のビジネス メソッドはインターセプトされません。ターゲット オブジェクトのは実行されません。
以上がJavaのプロキシモードとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。