-
-
役割:メソッドを強化するためには、に基づいてソースコードを変更しません
-
カテゴリー:
-
ダイナミックエージェントインタフェース
-
動的プロキシクラスに基づいて、
-
-
動的プロキシクラスに基づいて:
-
クラスは、関係:強化します
-
寄与者:サードパーティ製のライブラリCGLIB
-
プロキシオブジェクトを作成する方法:クラスを強化createメソッドを使用します
-
プロキシオブジェクト要求を作成します。エージェントクラスをすることは、最終的なクラスにはできません
-
メソッドのパラメータを作成します。
-
クラス:バイトコード
これは、バイトコード内のプロキシオブジェクトはプロキシオブジェクトのクラスローダを書かれていたがロードされます。(エージェントのクラスローダを書くために来る人)
-
コールバック:強化さを提供するためのコード
それは我々がプロキシを書く方法です。私たちは、一般的に、よりこのインタフェースを実装するクラスは、通常は匿名内部クラスですが、必須ではありません。クラス実装者の書き込みと、このインターフェースこと。MethodInterceptorの:私たちは、一般的に、このインタフェースのサブインタフェースの実装クラスを書きます
-
パッケージcom.xuefei.cglibProxy; // メーカー パブリック クラスプロデューサー{ 公共 空 saleProduct(フロートマネー){ System.out.printlnは(「お金、商品あなたに」+ マネー); } パブリック 無効 afterProduct(フロートマネー) { System.out.printlnは( + "あなたはお金の売却を取得" お金を); } }
パッケージcom.xuefei.cglibProxyを。 輸入com.xuefei.proxy.IProducer; 輸入net.sf.cglib.proxy.Enhancer; 輸入net.sf.cglib.proxy.MethodInterceptor; 輸入net.sf.cglib.proxy.MethodProxy; 輸入java.lang.reflect.InvocationHandler; 輸入java.lang.reflect.Methodオブジェクト; 輸入java.lang.reflect.Proxyの; パブリック クラスクライアント{ 公共 静的 ボイドメイン(最終文字列[]引数){ 最終プロデューサープロデューサー= 新たなプロデューサー()。 プロデューサーproducer1=(プロデューサー)Enhancer.create(producer.getClass()、新しい新しいMethodInterceptorの(){ / ** *任意の組み込まれた方法は、オブジェクトのメソッドを介してプロキシされている実行 * @param プロキシ * @param メソッド * @paramの引数 * @param methodProxy * @return *は@throws のThrowable * / パブリックオブジェクトインターセプト(オブジェクトプロキシ、メソッド、メソッド、オブジェクト[]引数、methodProxy methodProxy)がスローされたThrowable { //が強化コードを提供します returnValue =オブジェクトNULL ; // 方法が行わ取得パラメータ フロートマネー=(FLOAT)引数[0 ]; // 現在の方法が販売されていないか否かを判断する IF( "saleProduct" .equals(method.getName())){ のreturnValue =メソッド.invoke(プロデューサー、マネー* 0.8 F ); } を返すのreturnValueを; } }); producer1.saleProduct(1000F); } }
-
-
ダイナミックエージェント(ベース動的プロキシクラス)
おすすめ
転載: www.cnblogs.com/lililixuefei/p/11906204.html
おすすめ
ランキング