ホームページ >Java >&#&チュートリアル >Java 静的プロキシと動的プロキシの詳細な学習
1. プロキシ モード
プロキシ モードは、一般的に使用される Java 設計パターンであり、プロキシ クラスと委任クラスが同じインターフェイスを持っている点が特徴です。プロキシ クラスは主に委任クラスのメッセージの前処理、メッセージのフィルタリング、メッセージを委任クラスに転送し、その後メッセージを処理するなど。
通常、プロキシ クラスとデリゲート クラスの間には関連付けがあります。プロキシ クラスのオブジェクト自体は、実際にはサービスを実装しませんが、関連するメソッドを呼び出すことによって関連付けられます。特定のサービスを提供するデリゲート クラスのオブジェクト。
エージェントの作成時期に応じて、エージェント クラスは 2 つのタイプに分類できます。
静的プロキシ: プログラマーによって作成されるか、特定のツールによって自動的に生成されてコンパイルされます。プロキシ クラスの .class ファイルは、プログラムの実行前にすでに存在しています。
動的プロキシ: プログラムの実行時にリフレクション メカニズムを使用して動的に作成されます。
2. 単一の静的エージェント
码如下: public interface CountDao { // 查看账户方法 public void queryCount(); } public class CountDaoImpl implements CountDao { public void queryCount() { System.out.println("查看账户方法..."); } } public class CountTrancProxy implements CountDao { private CountDao countDao; public CountProxy(CountDao countDao) { this.countDao = countDao; } @Override public void queryCount() { System.out.println("tranc start"); countDao.queryCount(); System.out.println("tranc end"); } } public class TestCount { public static void main(String[] args) { CountTrancProxy countProxy = new CountTrancProxy(new CountDaoImpl()); countProxy.updateCount(); } }
tranc start
View accountメソッド...
tranc end
3. 複数の静的エージェント
を追加しました
码如下: public class CountLogProxy implements CountDao { private CountDao countDao; public CountLogProxy(CountDao countDao) { this.countDao = countDao; } @Override public void queryCount() { System.out.println("Log start"); countDao.queryCount(); System.out.println("Log end"); } }
トランザクション処理前に
Log start
をベースにView accountメソッドを実行します。 ..
トランザクション処理後
ログ終了
4. まとめ
実際、プロキシ クラスは継承またはインターフェイス実装によってプロキシの効果を実現するために使用できますが、複数のプロキシ クラスを相互に組み合わせる必要がある場合、継承は柔軟ではなく、プロキシ クラスを常に実行する必要があります。インターフェイスを実装する方法は、集約を通じてプロキシ クラスを簡単に結合することです。