打官司举例: A因为xxx事需要打一场官司,就找到了律师B,然后这件事的的抽象就是一个接口,A和B都要实现这个接口也就是打官司,A对于这个接口的具体实现是提出证据,B呢就需要拿到A说的证据 然后在这个前提上进行扩充 在法律条文中找到相关内容 来打赢官司 打官司的抽象 public interface 官司 { public void 提出证明(); public void 打完官司(); } A打官司的实现 public class A implements 官司{ @Override public void 提出证明() { System.out.println("证明材料..."); } @Override public void 打完官司() { System.out.println("结果..."); } } B代表A来打官司 public class B implements 官司{ //拿到A给的内容 private A a=new A(); @Override public void 提出证明() { System.out.println("前期工作准备..."); a.提出证明(); System.out.println("整理相关资料..."); System.out.println("辩证相关..."); } @Override public void 打完官司() { a.打完官司(); } } 上面就是一个静态代理的实现,是在不改变一个类的情况下对一个类方法的增强,有小朋友就提问了,为什么不把他们都写在一个类里面呢,为的是规范和解耦 代码语义化。但是这种静态的实现还是会造成耦合,因为如果有下一个人C想打官司又得再去找一个律师 然后那个律师再帮他去打官司。这时候就出现了动态代理 动态代理是公用一个律师,打官司的人虽然在换,但是官司的实现和要收集证据都是相似的。Spring里面的Aop的原理就用到了动态代理 动态代理以后写…