public interface People { public String eat(String param); } public class Jack implements People { @Override public String eat(String param) { System.out.println("=========Jack老师喜欢吃东======="); return "=========Jack老师喜欢吃东======="; } } public class Advice implements InvocationHandler1 { People people;//接口,传进来实例 public Advice(People people) { this.people = people; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //前置增强 before(); //被代理方 Object value = method.invoke(people,args); //后置增强 after(); return value; } private void before() { System.out.println("===========jack吃饭之前�?要洗�?=========="); } private void after() { System.out.println("===========jack吃完饭要洗碗============="); } } public class MyTest { public static void main(String[] args) { People proxyObject = (People) Proxy1.newProxyInstance(MyTest.class.getClassLoader(), new Class<?>[] { People.class }, new Advice(new Jack())); // 获取代理,MyTest.class.getClassLoader()是类加载器, //new Advice是对实现类new Jack()的增强,People.class是接口,在吃饭之前之后要洗手, proxyObject.eat("chi");// proxyObject是在内存的代理对象,对象名字$Proxy数字, //proxyObject = com.zhuguang.jack.aop.jdkProxy.Jack@5e5792a0,里面的h = com.zhuguang.jack.aop.jdkProxy.Advice@26653222
// $Proxy0/1 extends Proxy1 implements People,Proxy里面有一个属性InvocationHandler h; // proxyObject.eat("chi")调用的是h.invoke(Object proxy, Method method, Object[] // args), // h.invoke()方法调到advice.invoke(), } }