Java Dynamic ProxyはJavaに接続されたAPIで説明されているため、ここでは書きません。私が理解していること:
特定のインターフェイスで特定のメソッドの機能を拡張すると、これがプロキシです。プロキシは、プロキシインスタンスに関連付けられたコールハンドラーオブジェクトを介したコールメソッドです。
例でそれを見てみましょう:
インタフェース:
パブリックインターフェイスnum {void show(); int getnum(); int getProduct(int x);}実装クラス:
パブリッククラスmynumはnum {@override public int getnum(){return 3; } @Override public int getProduct(int x){return x; } @Override public void show(){system.out.println( "基礎となるメソッドはnumber 99"を印刷します); }}まず、InvokeメソッドがAPIでどのように説明されているかを見てみましょう
つまり、コールハンドラーは、インターフェイスの実装クラスオブジェクトにメソッドオブジェクトを表す基礎となる方法を呼び出します。
プロキシを実装する最初の方法:
public class numproxy {private object num; //コンストラクターメソッドを介してインターフェイスの実装クラスオブジェクトを作成しますpublic numproxy(object num){this.num = num; } public object getNumbyProxy(){object numproxy = proxy.newproxyinstance(num.getClass()。getClassloader()、new class [] {num.class}、new InvocationHandler(){ /*** Method:Method:方法私が理解しているのは、実際のメソッドのパラメーターアレイです。 obj =(integer)out.println( "getproduct()} Numproxyを返します。 }}プロキシを実装する2番目の方法:InvocationHandlerインターフェイスを実装することにより
パブリッククラスNumproxyimplは、InvocationHandlerを実装しています{//ここでは、インターフェイスタイプをコンクリートしましたが、オブジェクトのプライベート番号として書かれていません。 public numproxyimpl(num num){this.num = num; } @OverrideパブリックオブジェクトInvoke(Object Proxy、Method Method、Object [] args)Throws Throwable {object obj = null; string methodname = method.getName(); if( "getProduct" .equals(methodname)){system.out.println( "proxy:getProduct()start"); obj = method.invoke(num、args); obj =(integer)obj * 2; System.out.println( "proxy:getProduct()end"); } else if( "show" .equals(methodname)){system.out.println( "proxy:show()start"); obj = method.invoke(num、args); system.out.println( "proxy:show()end"); } objを返します。 }}テストコード:
public class testnum {public static void main(string [] args){// test numproxy np = new numproxy(new mynum()); num numproxy =(num)np.getnumbyproxy(); int x = numproxy.getProduct(2); System.out.println(x); numproxy.show(); System.out.println( "---------------------"); numproxyimpl npi = new numproxyimpl(new mynum()); num numpro =(num)proxy.newproxyinstance(num.class.getClassLoader()、new class [] {num.class}、npi); int n = numpro.getProduct(3); System.out.println(n); numpro.show(); }}コンソールの結果:
2番目の方法は少し混乱しています。あなたがそれを持っているかどうかはわかりません。つまり、表示されないNumproxyimplのInvokeメソッドと呼ばれますが、実行されました。はい、これを見に行きましょう。
面倒になりたくない場合は、覚えておいてください。
たとえば、エンコーディングプロセスを使用してプロキシを使用し、次回の例を記述できます。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。