spring通知-BeforeAdvice和AfterReturningAdvice

来源:互联网 发布:淘宝瑕疵大牌化妆品 编辑:程序博客网 时间:2024/06/05 19:08

通知(advice)是springAOP中重要的一个核心模块。
spring 通知分为方法调用之前方法 调用之后 或者任何区间。

  1. BeforeAdvice
    1 前置通知是在目标方法调用之前执行。
    2 通过实现MethodBeforeAdvice来植入前置通知
    3 MethodBeforeAdvice接口的主要代码:

        ```    public interface MethodBeforeAdvice extends BeforeAdvice {        void before(Method var1, Object[] var2, Object var3) throws Throwable;    }    ```

    4 前置通知的demo

     4.1 目标业务类
        /**     * 目标业务类     * Created by engle on 16-5-14.     */    public class Target{        public void log() {            System.out.println("日志信息");        }    }
    4.2 前置通知实现类
    /** * 业务执行前的通知 * Created by engle on 16-5-14. */public class BeforeMessage implements MethodBeforeAdvice{    @Override    public void before(Method method, Object[] objects, Object o) throws Throwable {        System.out.println("在日志之前通知");    }
    4.3 测试类
    /** * 测试类 * Created by engle on 16-5-14. */public class Test {    public static void main(String[] args) {        Target target = new Target();        BeforeAdvice before = new BeforeMessage();        AfterMessage after = new AfterMessage();        ProxyFactory factory = new ProxyFactory();  //设置代理工厂        factory.setTarget(log);     //添加执行目标信息        factory.addAdvice(before);  //添加执行前通知        Target proxy = (Target) factory.getProxy(); //获取代理对象        proxy.log();    }}
    4.4 输出结果![这里写图片描述](http://img.blog.csdn.net/20160514121410510)

2 AfterReturningAdvice

  1. 后置通知是在目标方法调用之后执行。
  2. 通过实现AfterReturningAdvice来植入后置通知 。
  3. AfterReturningAdvice接口的主要代码:
    public interface AfterReturningAdvice extends AfterAdvice {        void afterReturning(Object var1, Method var2, Object[] var3, Object var4) throws Throwable;    }
4.后置通知小demo(业务类和前置通知相同)    4.1 后置通知实现类
/** * 业务执行前的通知 * Created by engle on 16-5-14. */public class BeforeMessage implements MethodBeforeAdvice{    @Override    public void before(Method method, Object[] objects, Object o) throws Throwable {        System.out.println("在日志之前通知");    }}
    4.2测试类
public class Test {    public static void main(String[] args) {        Target target = new Target();        BeforeAdvice before = new BeforeMessage();        AfterMessage after = new AfterMessage();        ProxyFactory factory = new ProxyFactory();  //设置代理工厂        factory.setTarget(log);     //添加执行目标信息        factory.addAdvice(after);   //添加执行后的通知        Target proxy = (Target) factory.getProxy(); //获取代理对象        proxy.log();    }}
4.3结果:
日志信息方法执行之后的通知

如果有问题可以私信或者留言给我

0 0
原创粉丝点击