動的エージェントの単純テスト
//
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()が返すショーの実際のタイプの名前
宣言タイプの名前ではなく