Javaベースの動的プロキシ


パッケージプロキシ。 パブリックインターフェイスヒト{ 公共ボイドラン(); 公共ボイドが食べ(); }

  定義されたインタフェース

 

 

 

 

インターフェイスクラスの定義を完了します

パッケージプロキシ。

公共のクラスの先生は、人間の{実装

	@Override 
	ます。public void実行(){ 
		// TODO自動生成されたメソッドスタブを
		するSystem.out.println( "走"); 
	} 

	@Override 
	公共ボイドは(){食べる
		// TODO自動生成方法スタブ
		のSystem.out.println( "吃を"); 
	} 

}

 

メイン関数の定義を完了するには

プロキシパッケージ; 

インポートjava.lang.reflect.InvocationHandler; 
インポートjava.lang.reflect.Methodオブジェクト、
インポートjava.lang.reflect.Proxyの、

インポートorg.junit.Test; 

パブリッククラスデモ{ 
	公共の静的な無効メイン(文字列[]引数){ 
		教師教師=();新しい新規のteacher1 
		
		ヒトteacher2 =(ヒト)たとえば、Proxy.newProxyInstance(teacher.class.getClassLoader()(新しい新規のInvocationHandlerの、teacher.class.getInterfaces()){ 

			
			プロキシオブジェクト/ *呼び出し表さを実行オブジェクト引数メソッド応答パラメータ・オブジェクトのメソッド* /方法
			@Override 
			パブリック呼び出しオブジェクト(プロキシ、メソッドをオブジェクト、メソッド、[]引数オブジェクト)のThrowable {スロー
				するSystem.out.println(「何かをする前に」); 
				IF(方法。 getName()。等号( "食べる ")){/ * *決意方法/
					System.out.println(「食べる前に階段を下り走った」); 
				}
				
				ターゲットオブジェクトを実行する//メソッド        
				オブジェクトinvokea = Method.invoke(新しい新しい先生を()、引数); 
				System.out.printlnは( "何かをした後に"); 
				// TODO自動生成方法、スタブ
				戻りinvokea; 
			} 
		}) ; 
		
		
		teacher1.eat(); 
		teacher1.run(); 
		のSystem.out.println( "教師1完了"); 
		teacher2.eat(); 
		teacher1.run(); 
		
	} 
}

  結果

食べる
離れて
1完全な教師を
何かをする前に、
食べる前に手順を走った
食べ
た後に何かを
歩きます

 

動的プロキシ

  あなたはそれを事前に定義する必要がなく、実行時にクラスを変更する方法にカットすることができます。

 

おすすめ

転載: www.cnblogs.com/hywhyme/p/11618895.html