前の二つの記事で
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()、本。); } }