实例:在目标类和需要切入的类之间建立代理,如:主程序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 }

 

 

posted on 2018-07-03 11:02  行走的老腊肉  阅读(248)  评论(0编辑  收藏  举报