動的エージェントの単純テスト

1603 ワード

// 
import java.lang.reflect.Proxy;
public class DynamicProxyTest
{
	public static void main(String[] args)  throws Exception
	{
		// TODO Auto-generated method stub
		Show show = new ShowImp();
		Show exampleProxy = (Show)Proxy.newProxyInstance
		(
				show.getClass().getClassLoader(),
				show.getClass().getInterfaces(),
				new Handler()
		);
	
		exampleProxy.showOne();
		exampleProxy.showTwo();
	}
}

// Show
public interface Show
{
	void showOne();
	void showTwo();
}

// Show ShowImp
public class ShowImp implements Show
{

	public void showOne()
	{
		// TODO Auto-generated method stub
		System.out.println("interface show : showOne()");

	}

	public void showTwo()
	{
		// TODO Auto-generated method stub
		System.out.println("interface show : showTwo()");

	}
	
	/*public void showThree()
	{
		System.out.println("Example : showThree()");
	}*/

}

// InvocationHandler , Proxy.newProxyInstance() 
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class Handler implements InvocationHandler
{
	public Object invoke(Object proxy,Method method,Object[]args) 
	{
		System.out.println("IvocationHandler handle");
		return null;
	}

}

テスト結果:
なぜなら新ProxyInstance()のパラメータはインタフェースのみを提供しているので、InvocationHandlerはインタフェース内のメソッドのみを引き継ぐことができます.
Proxy.新ProxyInstance()もインタフェースのみを返すインスタンスであり、
したがって,このエージェントはエージェントがパラメータとしてのインタフェースであり,エージェントによってインタフェースにアクセスする方法は,IvocationHandlerのinvoke()メソッドによって処理されることが明確である.
余談:Show show=new ShowImp();show.getClass().getName()が返すショーの実際のタイプの名前
宣言タイプの名前ではなく