java jkd动态代理

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

public class JdkProxyTest {
	/***
	 * 动态代理的测试方法
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		StudentProxy studentProxy = new StudentProxy(new Student());
		IStudent iStudent = (IStudent) studentProxy.getProxyInstence();
		iStudent.say();
		
	}
}

/***
 * 代理类 实现了jdk 动态代理的方法
 * 
 * @author bobo
 * 
 */
class StudentProxy implements InvocationHandler {
	/**
	 * 要代理的目标对象
	 */
	private Object target;

	/***
	 * 代理方法的执行处
	 */
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		// 此处的proxy 是个什么东东呢 实在是不能理解啊
		System.out.println(proxy.getClass().getInterfaces().length);
		System.out.println("before...");
		Object obj = method.invoke(target, args);
		System.out.println("after...");
		return obj;
	}

	/***
	 * 获得代理对象的地方
	 * 
	 * @param c
	 * @return
	 */
	public Object getProxyInstence() {
		return Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), target.getClass().getInterfaces(), this);
	}

	public StudentProxy(Object obj) {
		this.target = obj;
	}
}

/**
 * 要被代理的类
 * 
 * @author bobo
 * 
 */
class Student implements IStudent {

	public String say() {
		System.out.println("Student.say()");
		return "i say:";
	}

}

/***
 * 被代理的类要是实现的接口
 * 
 * @author bobo
 * 
 */
interface IStudent {
	String say();
}

 

 

你可能感兴趣的:(java)