实例:在目标类和需要切入的类之间建立代理,如:主程序A(目标程序)要干某件事,现在需要在干这件事之前通知B程序一声,B要先干点活,比如写个日志,做个笔记啥的,然后A在去做这件事,本来A和B胡不搭嘎的,作为A自身专注与自己的事,不会去管B的,反之B一样,那怎么在A执行这件事前让B先干呢,这就是代理的作用,它负责A与B之间的通信,传达通知。
目标类A:Target.class
1 package test.aop; 2 3 public class Target { 4 //do something 5 public void execute(String name){ 6 System.out.println("do something"+name); 7 } 8 }
拦截类B:LoggerExcute.clas
package test.aop; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; /** * 拦截targetf方法,执行日志输出 */ public class LoggerExecute implements MethodInterceptor { @Override public Object invoke(MethodInvocation methodInvocation) throws Throwable { before();//执行前置通知 methodInvocation.proceed(); return null; } void before(){ System.out.println("程序开始执行"); } }
代理类C:负责AB之间的通信Manager.class
1 package test.aop; 2 3 import org.springframework.aop.framework.ProxyFactory; 4 5 /** 6 * 在被切对象:target和切的对象之间创建代理 7 * 相当与桥梁的作用 8 */ 9 public class Manager { 10 //create proxy 11 public static void main(String[] args) { 12 Target target = new Target(); 13 ProxyFactory di = new ProxyFactory(); 14 di.addAdvice(new LoggerExecute());//通知LoggerExecute 15 di.setTarget(target);//确定服务对象:target 16 Target proxy = (Target)di.getProxy(); 17 proxy.execute("AOP的简单实现"); 18 } 19 }