3つのJDKの動的プロキシとプロキシモードのCGLIBの強みと弱み、なぜJDKダイナミックプロキシインタフェースの基礎となるJDKダイナミックプロキシJavaのソースコード

前の二つの記事で

3つのJavaプロキシモード

JDKの動的プロキシとCGLIB長所と短所、なぜJDKダイナミックプロキシインタフェース

話題JDKダイナミックプロキシ

基礎となるソースコードのソースレベルの見た目からこの記事は、プラス

するSystem.setProperty( "sun.misc.ProxyGenerator.saveGeneratedFiles"、 "真");

ではエッセンス注釈(まだ)、我々はまた、プロキシクラスから抜け出すために、それをしなければなりません

Proxy0.class

公共finalクラス$ Proxy0は、プロキシの実装IUserDao {拡張
    プライベート静的メソッドM1を。
    プライベート静的メソッド立方メートル。
    プライベート静的メソッド平方メートル。
    プライベート静的メソッドM0。

    公共$ Proxy0(InvocationHandlerですvar1が)スロー{ 
        スーパー(VAR1)。
    } 

    公共の最終的なブール等しい(オブジェクトvar1が)スロー{ 
        試み{ 
            リターン((ブール)super.h.invoke(この、M1、新しいオブジェクト[] {VAR1}))にbooleanValue()。
        }キャッチ(のRuntimeException |エラーVAR3){ 
            スローVAR3。
        }キャッチ(ThrowableをVAR4){ 
            新規でUndeclaredThrowableException(VAR4)を投げます。
        } 
    }

    保存、公開最終ボイド(){スロー
        試し{ 
            super.h.invoke(本、M3、(オブジェクト[])はnullを)。
        }キャッチ(のRuntimeException |エラーVAR2){ 
            スローVAR2。
        }キャッチ(ThrowableをVAR3){ 
            新規でUndeclaredThrowableException(VAR3)を投げます。
        } 
    }

 

H:

パブリッククラスProxyFactory実装のInvocationHandler { 
    //维护一个目标对象
    プライベートオブジェクトのターゲット。
    公共ProxyFactory(オブジェクト・ターゲット){ 
        this.target =ターゲット。
    } 

    @Override 
    (オブジェクトプロキシ、メソッドのメソッド、オブジェクト[]引数)を呼び出すパブリックオブジェクトのThrowable {スロー
        
        オブジェクトのreturnValue = method.invoke(ターゲット、引数)を、
        
        returnValueを返します。
    } 

    //给目标对象生成代理对象
    パブリックオブジェクトgetProxyInstance(){ 
        リターンたとえば、Proxy.newProxyInstance(target.getClass()のgetClassLoader()、target.getClass()でgetInterfaces()、本。); 
    } 

}

 

おすすめ

転載: www.cnblogs.com/silyvin/p/12032768.html