この記事はJavaダイナミックプロキシについての知識ポイントを整理したものです。具体的な内容は以下の通りです
1.JAVAダイナミックプロキシ(より正式な記述)
プロキシモードは、よく使われるJavaのデザインパターンです。デリゲート クラスは同じインターフェイスを持ちます。プロキシ クラスは主に、デリゲート クラスのメッセージの前処理、メッセージのフィルタリング、デリゲート クラスへのメッセージの転送、およびその後のメッセージの処理を担当します。通常、プロキシ クラスとデリゲート クラスの間には関連付けがあります。プロキシ クラスのオブジェクト自体は実際にはサービスを実装しませんが、関連するメソッドを呼び出すことによって行われます。デリゲート クラスのオブジェクトの特定のサービスを提供します。
エージェントの作成時期に応じて、エージェントクラスは2種類に分けられます。
静的プロキシ: プログラマーによって作成されるか、特定のツールによって自動的に生成され、コンパイルされます。プログラムが実行される前に、プロキシ クラスの .class ファイルはすでに存在します。
動的プロキシ:プログラム実行時にリフレクション機構を利用して動的に作成されます。
2. 動的プロキシの実装
java.lang.reflect.Proxy,
Proxyは、動的プロキシクラスとインスタンスを作成するための静的メソッドを提供します。
newProxyInstance()
メソッド呼び出しを変換できる、指定されたインターフェースのプロキシクラスインスタンスを返します。指定されたコール ハンドラにディスパッチされます。 O 2.1. DAO インターフェイス (アナログ データ アクセス層インターフェイスを提供)
package javaproxy; /* * 定义一个数据访问层接口 */ public interface Dao { //模拟数据保存 public void save(); }
2.2. DaoimPl クラス
package javaproxy; public class DaoImpl implements Dao{ @Override public void save() { System.out.println("执行一个保存方法。。。。。。。。。。。。"); } }
.5. 結果
3. Mybatis でのプロキシ実装のシミュレーション3.1. MapperProxy クラスpackage javaproxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class DaoHandler implements InvocationHandler{ private Object obj; public DaoHandler(Object obj) { this.obj=obj; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("do something before method");//这里模拟AOP的前置方法 Object ret = method.invoke(this.obj, args); System.out.println("do something after method");//这里模拟AOP的后置方法 return ret; } }
3.3. JDK 動的プロキシの使用例役に立つでしょう誰もが Java プログラミングを学習できるようにします。
Java ダイナミック プロキシ モードに関連する詳細な記事については、PHP 中国語 Web サイトに注目してください。