プロキシモード(ダイナミックプロキシ)

動的プロキシ。つまり、限り、ライン上のインターフェースの実装など、独自のプロキシクラスを記述しないでください。

JDKおよびCGLIB:ダイナミックプロキシは、ここ2を説明します

最初のJDK

// インタフェースクラス
のパブリック インタフェースブック{
     無効読む(文字列名); 
} 

// 1つの実装クラス
パブリック クラスBookImpl道具帳{ 
    @Override 
    公共 無効読む(文字列名){ 
        システム。OUT .println(名); 
    } 
} 

/ / プロキシクラスにインターフェースを実装する
パブリック クラスMyInvocationHandlerのInvocationHandlerの実装{
     プライベートオブジェクト目標;
     公衆MyInvocationHandler(オブジェクト・ターゲット){
         この .TARGET = 目標; 
    } 
    @Override
    パブリックオブジェクトを呼び出し(オブジェクトo、方法方法、[]引数オブジェクト)がThrowableを{スロー
     リターンmethod.invoke(ターゲット、引数)。
    } 
} 

// 测试方法 
パブリッククラスメイン{
 公共 静的 ボイドメイン(文字列引数[]){ 
    ブックbookImpl = 新しいBookImpl。
    オブジェクトOBJ = たとえば、Proxy.newProxyInstance(bookImpl.getClass、 ブック、getClss()。GETINTERFACE()、新しいmyInvocation 

}

CGLIB

// 一个实现类
パブリック クラスBookImpl { 
    @Override 
    公共 ボイド読み取り(文字列名){ 
        システム。アウト.println(名); 
    } 
} 

// 实现一个一个代理类接口
パブリック クラスMyInsterceptorはMethodIntao {実装
     プライベートオブジェクトのターゲットと、
    公共MyInvocationHandler(オブジェクト・ターゲット){
         この .TARGET = ターゲット。
    } 
    @Override 
    パブリックオブジェクトインターセプト(オブジェクトOは、メソッドの方法は、MethodProxy myInterceを[]引数オブジェクト)がThrowableを{スロー
     リターンmethod.invoke(ターゲット、引数)。
    } 
} 

// 测试方法 
公開クラスメイン{
 公共の 静的な 無効メイン(文字列の引数[]){ 
    BookImplブック = 新しいBookImpl(); 
    エンハンサーエンハンサー = 新しいエンハンサー(); 
    enhancer.setSuperClass(book.getClass)。
    enhancer.setCallback(新しいMyInterceptor(書籍))
    BookImplのB = (BookImpl)enhancer.create(); 
}

 

おすすめ

転載: www.cnblogs.com/LixiaoFeng1650062546/p/11493787.html