動的プロキシ

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();
	}

}