Blog of CodeJELLOW’S ENGINEERING NOTES
← 返回文章

Spring AOP 通知类型实现

spring aop通知(advice)分成五类: 前置通知[Before advice]:在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常。 后置通知[After returning advice]:在连接点正常执行完成后执行,如果连接点抛出…

本文目录 ⌄

    spring aop通知(advice)分成五类:

    1. 前置通知[Before advice]:在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常。
    2. 后置通知[After returning advice]:在连接点正常执行完成后执行,如果连接点抛出异常,则不会执行。
    3. 异常通知[After throwing advice]:在连接点抛出异常后执行。
    4. 返回通知[After (finally) advice]:在连接点执行完成后执行,不管是正常执行完成,还是抛出异常,都会执行返回通知中的内容。
    5. 环绕通知[Around advice]:环绕通知围绕在连接点前后,比如一个方法调用的前后。这是最强大的通知类型,能在方法调用前后自定义一些操作。环绕通知还需要负责决定是继续处理join point(调用ProceedingJoinPoint的proceed方法)还是中断执行。

    接下来通过编写示例程序来测试一下五种通知类型:

    非注解方式

    前置通知

    定义aop类

    图片暂不可用。
    • method:被调用的方法,就是连接点
    • objects:被调用方法的参数
    • o:调用被调用方法的对象

    xml文件

    注意要先在ioc容器中放入对象才能使用id引用。

    图片暂不可用。
    TEXT
     <bean id="logBefore" class="com.cztcode.spring.aop.LogBefore"/>
        <aop:config>
            <aop:pointcut id="point" expression="execution(public void com.cztcode.spring.impl.StudentServiceImpl.addStudent(com.cztcode.spring.entity.Student))"/>
    <!--        关联ref,当执行点时,执行advice-->
            <aop:advisor advice-ref="logBefore" pointcut-ref="point"/> 
        </aop:config>

    执行结果

    图片暂不可用。

    后置通知

    后置通知与前置类似,只是参数和接口不同

    图片暂不可用。

    多了一个

    • returnValue:方法返回值

    xml文件

    图片暂不可用。

    执行结果

    图片暂不可用。

    异常通知

    图片暂不可用。

    Exception:异常类型

    图片暂不可用。
    图片暂不可用。

    环绕通知

    环绕通知很强大,上面那三个通知都可以做到。

    图片暂不可用。

    xml文件配置方法相同。

    图片暂不可用。

    如果invocation.proceed()没有写,那么这个切入点方法就不会被执行。但是环绕方法的通知会执行。

    环绕通知底层通过拦截器实现。

    注解形式

    前置和后置通知

    图片暂不可用。

    开启扫描器和对AOP注解支持

    图片暂不可用。

    实现效果

    图片暂不可用。

    异常通知

    图片暂不可用。
    图片暂不可用。

    截获某种异常

    图片暂不可用。

    若发生异常通知,后置通知将不会触发

    环绕通知

    图片暂不可用。

    最终通知

    其实在环绕通知中已经实现了最终通知

    图片暂不可用。
    图片暂不可用。
    通过 RSS 订阅更新 →