package javaProxy; import Dao.Customer; import DaoImpl.CustomerImpl; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * 基于java的动态代理 * * @author jia * @create */ public class JDKProxy { // 代理目标 private Object targetObject; public Object proxy(Object obj) { targetObject = obj; return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), new TargetHandler()); } class TargetHandler implements InvocationHandler { public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 添加业务处理前的处理 dealStart(); // 回调被代理目标的方法 Object returnValue = method.invoke(targetObject, args); // 添加业务处理后的处理 dealEnd(); return returnValue; } private void dealStart() { StringBuffer sb = new StringBuffer("开始购物前处理。。。"); sb.append("开始学习java第一章"); sb.append("hello word 开始。。。。。"); sb.append("java第一章学习结束"); System.out.println(sb.toString()); } private void dealEnd() { StringBuffer sb = new StringBuffer("购物结束后的处理。。。"); sb.append("练习学习过的java第一章"); sb.append("上次学的是hello word"); sb.append("java练习结束"); System.out.println(sb.toString()); } } public static void main(String[] args) { JDKProxy jdkProxy = new JDKProxy(); Customer userDao = (Customer) jdkProxy.proxy(new CustomerImpl()); userDao.walk("阿拉斯加"); } }