ダイナミックエージェントJDK下記の例
インターフェイスの件名
パブリック インターフェーステーマ{ パブリック 抽象 ボイド要求()。 }
実装クラスRealSubject
パブリック クラス RealSubjectが実装サブジェクト{ @Override 公共 ボイド要求(){ System.out.printlnは( "realsubjctから" )。 } }
演技クラス
パブリック クラス DynamicSubjectは、実装のInvocationHandler { プライベートオブジェクトのサブ。 公共DynamicSubject(オブジェクトobj){ この .SUB = OBJ。 } @Override パブリックオブジェクトを呼び出し(オブジェクトのプロキシは、メソッドの方法は、[]引数オブジェクト)スローのThrowable { するSystem.out.println( "を呼び出す前に:" + メソッド); method.invoke(この.SUB、引数); System.out.println( "呼び出した後:" + メソッド)。 リターン ヌル。 } }
Clientクラス
パブリック クラスクライアント{ 公共 静的 ボイドメイン(文字列[]引数){ RealSubject RS = 新しいRealSubject()。 InvocationHandlerハンドラ = 新しいDynamicSubject(RS); クラス CLS = <?> rs.getClass(); 被験者被験者 = (被写体)プロキシ。 newProxyInstance(cls.getClassLoader()、cls.getInterfaces()、ハンドラ); subject.request(); } }
結果
呼び出す前に:パブリック 抽象 ボイドcom.learn.jvm.Subject.request() realsubjctから 呼び出した後:パブリック 抽象 ボイド com.learn.jvm.Subject.request()