动态代理具体的实现过程,我估计里面就是用的反射,让我自己写大概也行,但是肯定写的不如人家好,但是必要的参数已经传进去了,所以能写个大概。
-
Teacher
-
public interface Teacher { public void teach(); }
-
-
TeacherDao
-
public class TeacherDao implements Teacher{ @Override public void teach() { System.out.println("老师正在授课"); } }
-
-
ProxyFactory
-
public class ProxyFactory { private Object targer; public ProxyFactory(Object targer){ this.targer = targer; } public Object getProxyInstance(){ return Proxy.newProxyInstance(targer.getClass().getClassLoader(), targer.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("jdk代理开始"); Object returnValue = method.invoke(targer, args); System.out.println("jdk代理提交"); return returnValue; } }); } }
-
-
CLient
-
public class Client { public static void main(String[] args) { Teacher target = new TeacherDao(); Teacher proxyInstance = (Teacher) new ProxyFactory(target).getProxyInstance(); proxyInstance.teach(); } }
-
运行结果:
jdk代理开始 老师正在授课 jdk代理提交



