spring通知-BeforeAdvice和AfterReturningAdvice

通知(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结果:
日志信息
方法执行之后的通知

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

上一篇:SpringMVC-intercepter配置


下一篇:SpringAOP 通知(adivce)- methodIntercepor