Javaプロキシモードについてお話しましょう
1。静的プロキシ
1.1静的プロキシプロキシとプロキシクラスの両方が共通のインターフェイスを維持する必要があります。
パブリックインターフェイスiuserdao {void save();}1.2プロキシクラス、ターゲットオブジェクト
パブリッククラスのuserdaoはiuserdaoを実装します{@override public void save(){system.out.println( "-----データが保存されました!!! ------"); }}1.3プロキシオブジェクト
Public Class userDaoproxyはiuserdaoを実装します{//ターゲットオブジェクトプライベートiuserdaoターゲットを受信して保存します。 public userdaoproxy(iuserdaoターゲット){this.target =ターゲット; } @Override public void save(){system.out.println( "トランザクション開始..."); target.save(); //ターゲットオブジェクトSystem.out.printlnを実行する方法( "トランザクションを送信..."); }}1.4テストクラス
public class app {public static void main(string [] args){//ターゲットオブジェクトiuserdaoターゲット= new userdao(); // proxy iuserdao proxy = new userDaoproxy(ターゲット); proxy.save(); //プロキシメソッドを実行}} 2。動的エージェント
2.1同様に、動的プロキシもインターフェイスを完了する必要があります。 (上記と同様)
2.2ターゲットオブジェクトは同じです。
2.3プロキシオブジェクトではまったく異なります
public class proxyFactory {//ターゲットオブジェクトのプライベートオブジェクトターゲットを維持します。 public ProxyFactory(Object Target){this.target =ターゲット; } //プロキシオブジェクトの生成public Object getProxyInstance(){return proxy.newProxyInstance(target.getClass()。getClassLoader()、target.getClass()。 system.out.println(「トランザクションの開始」) }}2.4テストクラス
public class app {public static void main(string [] args){//ターゲットオブジェクトiuserdaoターゲット= new userdao(); system.out.println(target.getClass()); //ターゲットオブジェクトのプロキシオブジェクトを作成しますiuserdao proxy =(iuserdao)new proxyFactory(ターゲット).getProxyInstance(); System.out.println(proxy.getClass()); // method [proxy object] proxy.save();を実行します。 }} 3。CGLIBプロキシ
3.1cglibプロキシはインターフェイスを完了する必要はありません。プロキシを使用するクラスとプロキシクラスを作成するだけです。ここのプロキシは1.2と同じなので、書き込まれなくなりました。
3.2プロキシクラスは異なります。 CGLIBプロキシモードを使用する場合、SpringのCore Frameworkパッケージを参照する必要があります。
Public Class ProxyFactoryは、MethodEnterceptor {//ターゲットオブジェクトのプライベートオブジェクトターゲットを維持します。 public ProxyFactory(Object Target){this.target =ターゲット; } //ターゲットオブジェクトのプロキシオブジェクトを作成しますパブリックオブジェクトgetProxyInstance(){// 1。ツールクラスエンハンサーEN = new Enhancer(); // 2。親クラスen.setsuperclass(target.getClass())を設定します。 // 3。コールバック関数en.setCallback(this)を設定します。 // 4。サブクラス(プロキシオブジェクト)を作成しますen.create(); } @Override public Object intercept(Object obj、Method Method、Object [] args、MethodProxyプロキシ)スロー可能{System.out.println( "start transaction ..."); //ターゲットオブジェクトを実行するメソッドreturnValue = method.invoke(ターゲット、args); System.out.println( "トランザクションを送信......"); ReturnValue; }}3.3テストクラス
public class app {public static void main(string [] args){//ターゲットオブジェクトuserdaoターゲット= new userdao(); system.out.println(target.getClass()); // proxy object userdao proxy =(userdao)new ProxyFactory(ターゲット).getProxyInstance(); System.out.println(proxy.getClass()); //プロキシオブジェクトproxy.save()を実行する方法; }}上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。