天天看点

java动态代理Dynamic Proxy

1.被代理对象的接口:

package test.dynamicproxy;

public interface TargetInterface {
	public void SayHello();
	public int sum(int a ,int b);
}

      

2.被代理的对象:

package test.dynamicproxy;

public class Target implements TargetInterface {

	public void SayHello(){
		System.out.println("Hello");
	}
	public int sum(int a, int b) {
		return a+b;
	}
}

      

3.InvocationHandler包装:

package test.dynamicproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class TargetInvocationHandler implements InvocationHandler {

	private Object object;
	public TargetInvocationHandler(Object obj){
		this.object=obj;
	}
	
	public Object invoke(Object proxy, Method method, Object[] args2)
	throws Throwable
	{
		doBefore();
		Object result = method.invoke(object, args2);
		doAfter();
		return result;
	}

	public void doBefore(){
		System.out.println("do before");
	}

	public void doAfter(){
		System.out.println("do after");
	}
}

      
package test.dynamicproxy;

import java.lang.reflect.Proxy;

public class TestDynamicProxy {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Target t=new Target();
		TargetInvocationHandler handler=new TargetInvocationHandler(t);
		
		TargetInterface proxy = (TargetInterface) Proxy.newProxyInstance(
				t.getClass().getClassLoader(),
				t.getClass().getInterfaces(),
				handler);
				
		proxy.SayHello();

		int b=proxy.sum(10, 20);
		System.out.println(b);
	}

}