国内外网站网站,网站与平台的区别,做公众号封面网站,六安网站制作多少钱动态代理的深化#xff1a;承接动态代理2( 对 上级实例进行 深化)#xff0c;也就是 spring 的前身 #xff08;必须掌握#xff09;实例#xff1a; 文件说明#xff1a;1.有一个Waiter接口#xff0c;该接口有一个 server() 、ShouQian()方法 2.有一个 Waiter接口的实…动态代理的深化承接动态代理2( 对 上级实例进行 深化)也就是 spring 的前身 必须掌握实例 文件说明1.有一个Waiter接口该接口有一个 server() 、ShouQian()方法 2.有一个 Waiter接口的实现类ManWaiter类 3.一个 测试Test类 4. 后置增强接口 AfterAdvice 接口 5.前置增强接口BeforeAdvice接口 6. 生成代理对象 的 ProxyFactory类 1. Waiter.java 接口 // 服务员 public interface Waiter { // 服务 public void serve(); //收钱 public void shouQian(); } 2. BeforeAdvice.java 接口前置增强接口 /** * 前置增强 * author cxf * */ public interface BeforeAdvice { public void before(); } 3. AfterAdvice.java 接口后置增强接口 /** * function 后置增强 * author not-bug * */ public interface AfterAdvice { public void after(); } 4 . ManWaiter.java 类该类实现了 Waiter接口 //该类实现了 Waiter 接口 public class ManWaiter implements Waiter { public void serve() { System.out.println(服务中...); } public void shouQian() { System.out.println(混蛋给我钱); } } 5. ProxyFactory.java 类用来生成代理对象的类 /** * 它用来生成代理对象 * 它需要所有的参数 * * 目标对象 * * 增强 * author cxf */ /** * 1. 创建代理工厂 * 2. 给工厂设置三样东西 * * 目标对象setTargetObject(xxx); * * 前置增强setBeforeAdvice(该接口的实现) * * 后置增强setAfterAdvice(该接口的实现) * 3. 调用createProxy()得到代理对象 * * 执行代理对象方法时 * 执行BeforeAdvice的before() * 目标对象的目标方法 * 执行AfterAdvice的after() * author cxf * */ public class ProxyFactory { private Object targetObject;//目标对象 private BeforeAdvice beforeAdvice;//前置增强 private AfterAdvice afterAdvice;//后置增强 /** * 用来生成代理对象 * return */ public Object createProxy() { /* * 1. 给出三大参数 */ ClassLoader loader this.getClass().getClassLoader(); Class[] interfaces targetObject.getClass().getInterfaces(); InvocationHandler h new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { /* * 在调用代理对象的方法时会执行这里的内容 */ // 执行前置增强 if(beforeAdvice ! null) { beforeAdvice.before(); } Object result method.invoke(targetObject, args);//执行目标对象的目标方法 // 执行后置增强 if(afterAdvice ! null) { afterAdvice.after(); } // 返回目标对象的返回值 return result; } }; /* * 2. 得到代理对象 */ Object proxyObject Proxy.newProxyInstance(loader, interfaces, h); return proxyObject; } public Object getTargetObject() { return targetObject; } public void setTargetObject(Object targetObject) { this.targetObject targetObject; } public BeforeAdvice getBeforeAdvice() { return beforeAdvice; } public void setBeforeAdvice(BeforeAdvice beforeAdvice) { this.beforeAdvice beforeAdvice; } public AfterAdvice getAfterAdvice() { return afterAdvice; } public void setAfterAdvice(AfterAdvice afterAdvice) { this.afterAdvice afterAdvice; } } 6. Test.java 测试类 /* * 目标是让目标对象和增强都可以切换 */ public class Demo3 { Test public void fun1() { ProxyFactory factory new ProxyFactory();//创建工厂 factory.setTargetObject(new ManWaiter());//设置目标对象 factory.setBeforeAdvice(new BeforeAdvice() {//设置前置增强 public void before() { System.out.println(您好不好); } }); factory.setAfterAdvice(new AfterAdvice() {//设置后置增强 public void after() { System.out.println(再见不见); } }); Waiter waiter (Waiter)factory.createProxy(); //waiter.shouQian(); waiter.serve(); } //转账方法 public void zhuanZhang() { /* * 1. * 2. * 3. */ } } 运行结果 转载于:https://www.cnblogs.com/Prozhu/p/5452962.html