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

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

时间: 2024-07-31 07:32:03

spring通知-BeforeAdvice和AfterReturningAdvice的相关文章

spring通知顺序问题

问题描述 小弟最近刚开始学习spring3.2可是AOP的 后置通知 跑到了 最终通知的前面,环绕通知也跑到了 前置通知的前面,,,请问这是正确的吗 ,他们的顺序对程序有没有影响,如果有影响,到底是哪儿的问题呢? 解决方案 [第六章] AOP 之 6.7 通知顺序 --跟我学spring3

spring aop-初学Spring aop ,遇到了object is not an instance of declaring class的问题

问题描述 初学Spring aop ,遇到了object is not an instance of declaring class的问题 CompareInterceptor类 package com.spring.advice;import org.aopalliance.intercept.MethodInterceptor;import org.aopalliance.intercept.MethodInvocation;public class CompareInterceptor i

初学spring aop 遇到了object is not an instance of declaring class的问题

问题描述 CompareInterceptor类package com.spring.advice; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; public class CompareInterceptor implements MethodInterceptor {@Overridepublic Object invoke(Meth

Java面试笔试题大汇总(最全+详细答案)

声明:有人说, 有些面试题很变态,个人认为其实是因为我们基础不扎实或者没有深入.本篇文章来自一位很资深的前辈对于最近java面试题目所做的总结归纳,有170道题目 ,知识面很广 ,而且这位前辈对于每个题都自己测试给出了答案 ,如果你对某个题有疑问或者不明白,可以电脑端登录把题目复制下来然后发表评论,大家一起探讨,也可以电脑端登录后关注我给我发私信,我们一起进步! 以下内容来自这位前辈 2013年年底的时候,我看到了网上流传的一个叫做<Java面试题大全>的东西,认真的阅读了以后发现里面的很多题

Spring AOP中的前置通知和后置通知详解

不同版本的spring对AOP的支持有所不同,spring2.0之前,它主要针对不同类型的拦截器使用XML配置文件通过代理来实现.而spring2.0之后,它可以使用JDK5的注解来完成AOP的实现,只是几个简单标签就可以完成,使得开发更加简单,便捷.所以推荐使用后一种方法.但是很多旧的项目中使用了前一种实现方法,所以我们也应该对第一种方法有所掌握. 首先通过代码介绍spring2.0之前如何实现前后置通知 定义一个User接口: package org.spring.advice; publi

Spring中基于aop命名空间的AOP 二(声明一个切面、切入点和通知)

2.声明一个切面 在基于AOP命名空间的Spring AOP中,要声明一个切面,需要使用<aop:config/>的子标签 <aop:aspect>.<aop:aspect>标签有一个ref属性必须被赋值,它用于指定和该切面关联的 受管Bean(backing bean,以后我们都将使用Backing Bean来称呼这样的Bean).正如下例所示,该Bean 对应的java类是一个普通的java类,在该类中定义了切面的通知方法.此外,<aop:aspect>

【框架】[Spring]纯Java方式实现AOP拦截-详解ThrowsAdvice异常通知

转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 这篇博客讲了AOP代理-通知的3种方式: 1.MethodBeforeAdvice-前置通知 2.AfterReturningAdvice-正常返回后通知 3.MethodInterceptor-环绕通知 [框架][Spring]纯Java的方式实现AOP切面(拦截)技术 现在本篇博客再详细讲解一下ThrowsAdvice-异常通知. 顾明思议,就是被代理的原型对象出异常了,就会运

Spring 通过来AOP 实现前置,环绕,异常通知,注解(转)

本节主要内容:     1. Spring AOP前置通知案例     2. Spring AOP环绕通知案例     3. Spring AOP异常通知案例     4. Spring AOP注解使用案例   AOP是Aspect Oriented Programming的缩写,意思是面向方面编程,AOP实际是GoF设计模式的延续   关于Spring AOP的一些术语 切面(Aspect):在Spring AOP中,切面可以使用通用类或者在普通类中以@Aspect 注解(@AspectJ风格

判断,Spring的配置须由struts-config.xml通知其所在的目录?

问题描述 判断题:Spring的配置文件必须通过struts-config.xml通知应用服务器其所在的目录,这话对吗?  还有下面这个选择题,判断题和选择题任意答一个就行了单选题: 判断题和选择题任意答一个就行了,最好解释一下原因 解决方案 Spring的配置文件是配置在web.xml里的<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:a