package sample.proxy;
public interface ITarget {
public void method();
public void method1();
}
package sample.proxy;
public class TargetImpl implements ITarget {
public void method() {
System.out.println("元のメソッド実行");
}
public void method1() {
System.out.println("元のメソッド実行1");
}
}
package sample.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class MyInvacationHandler implements InvocationHandler {
private Object fTarget;
public MyInvacationHandler(Object target){
fTarget = target;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.print("メソッド呼び出し前\t");
Object ret = method.invoke(fTarget, args);
System.out.print("\tメソッド呼び出し後");
return ret;
}
}
package sample.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class Client {
public static void main(String[] args) {
InvocationHandler handler = new MyInvacationHandler(new TargetImpl());
ITarget obj = (ITarget) Proxy.newProxyInstance(Client.class
.getClassLoader(), new Class[] { ITarget.class }, handler);
System.out.print("プロキシの実装クラス" + obj.getClass());
obj.method();
obj.method1();
}
}