1.前置增强

BeforeAdvice是前置增强的接口,方法前置增强的MethodBeforeAdvice接口是其子类,
MethodBeforeAdvice接口仅仅定义了唯一的方法:before(Method method,Object[] args,Object obj) throws Throwable,
method为目标类的方法;args为目标类方法的入参;而obj为目标类实例。
当该方法发生异常时,将阻止目标类方法的执行
2.后置增强
后置增强在目标类方法调用后执行
通过实现AfterReturningAdvice来定义后置增强的逻辑,仅仅定义了唯一的方法
afterReturning(Object returnObj,Method method,Object[] args,Object obj) Throws Throwable
returnObj为目标实例方法返回的结果;method为目标类的方法;args为目标实例的方法的入参;而obj为目标类实例
注:假设在后置增强中抛出异常,如果该异常的目标方法声明的异常,则该异常归并到目标方法中
如果不是目标方法所声明的异常,则Spring将其转为运行期异常抛出
3.环绕增强
环绕增强允许在目标类方法调用前后织入横切逻辑,综合实现了前置、后置增强两者的功能
Spring直接使用AOP联盟所定义的import org.aopalliance.intercept.MethodInterceptor作为环绕增强的接口。
该接口有唯一的接口方法Object invoke(MethodInvocation invocation) throws Throwable
MethodInvocattion不但封装目标方法及其入参数组,还封装了目标方法所在的实例对象,
通过MethodInvocation的getArguments()可以获取目标方法的入参数组,
通过procced()反射调用目标实例相应的方法
4.异常抛出增强
异常抛出增强最适合的应用场景的是事务管理,当参与事务的某个Dao发生异常时,事务管理器就必须回滚事务
ThrowsAdvice异常抛出增强接口没有定义任何方法,它是一个标识接口,在运行期Spring使用反射的机制自行判断,
我们必须采用以下签名形式定义异常抛出的增强方法:
void afterThrowing(Method method,Object[] args,Object target,Throwable th)
方法名必须为afterThrowing,方法入参规定如下:前三个入参时可选的(要么三个入参提供,要么不提供)
最后一个入参是Throwable或其子类
可以在同一个异常抛出增强中定义多个afterThrowing(),当目标类方法抛出异常时,
Spring会自动选用最匹配的增强方法
5.引介增强
引介增强是一种比较特殊的增强类型,它不是在目标方法周围织入增强,而是为目标类创建新的方法和属性
所以引介增强的连接点是类级别的,而非方法级别的。
通过引介增强,我们可以为目标类添加一个接口的实现,即原来目标类为实现某个接口,
通过引介增强可以为目标类创建实现某接口的代理
Spring定义了引介增强接口IntroductionInterceptor,该接口没有定义任何方法,
Spring为该接口提供了DelegatingIntroductionInterceptor实现类,
一般情况下,我们通过扩展该实现类定义自己的引介增强类

Advice详解的更多相关文章

  1. 探秘SpringAop(一)_介绍以及使用详解

    常用的编程范式 AOP 是什么 是一种编程方式,不是编程语言 解决特定问题,不能解决所有的问题 OOP的补充,不是代替 AOP 初衷 DRY: Don't repeat yourself(代码重复) ...

  2. css文本格式详解

    一.css文本主体内容: 二.css文本详解:  1.文本缩进 语法: text-indent:<length>|<percentage> 默认值为0. 属性值详解: < ...

  3. spring事务配置详解

    一.前言 好几天没有在对spring进行学习了,由于这几天在赶项目,没有什么时间闲下来继续学习,导致spring核心架构详解没有继续下去,在接下来的时间里面,会继续对spring的核心架构在继续进行学 ...

  4. Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解

    Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解 (本文转自: http://blog.csdn.net/yinhaide/article/details/44756 ...

  5. Spring事务Transaction配置的五种注入方式详解

    Spring事务Transaction配置的五种注入方式详解 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学 ...

  6. Spring、Spring事务详解;使用XML配置事务

    @Transactional可以设置以下参数: @Transactional(readOnly=false) // 指定事务是否只读的 true/false @Transactional(rollba ...

  7. [转载] 多图详解Spring框架的设计理念与设计模式

    转载自http://developer.51cto.com/art/201006/205212_all.htm Spring作为现在最优秀的框架之一,已被广泛的使用,51CTO也曾经针对Spring框 ...

  8. Spring4 AOP详解

    Spring4 AOP详解 第一章Spring 快速入门并没有对Spring4 的 AOP 做太多的描述,是因为AOP切面编程概念不好理解.所以这章主要从三个方面详解AOP:AOP简介(了解),基于注 ...

  9. 【转载】Spring AOP详解 、 JDK动态代理、CGLib动态代理

    Spring AOP详解 . JDK动态代理.CGLib动态代理  原文地址:https://www.cnblogs.com/kukudelaomao/p/5897893.html AOP是Aspec ...

随机推荐

  1. MNIST机器学习

    MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片: 1. MNIST数据集 MNIST,是不是听起来特高端大气,不知道这个是什么东西? == 手写数字分类问题所要用到的(经典)MNIS ...

  2. 基于express+mongodb+pug的博客系统——pug篇

    很久之前就想自己搭一个博客了,最开始用hexo+github,但是换电脑后总是有些麻烦.后来使用WordPress,但是用WordPress总觉得没什么技术含量,前后端都是人家写好的,而且买的垃圾虚拟 ...

  3. Java学习笔记——浅谈数据结构与Java集合框架(第二篇、Queue、Set)

    江南好,何处异京华. 香散翠帘多在水,绿残红叶胜于花.无事避风沙. --<纳兰词> 诗词再好,大图不能忘 上大图: 先说说栈和队列: 栈就好比手枪的弹匣,你往里面压入子弹,最先压入的子弹就 ...

  4. B507实验室打印机连接方法

    一.准备工具 实验室打印机内网IP地址:172.16.135.41 ,这个地址要看具体的打印机地址(可能会更换). 从实验室QQ群(土匪窝)上下载打印机驱动,如下图所示. 3. 非常重要的事情:请链接 ...

  5. 深入理解Activity的启动模式

    众所周知,当我们多次启动同一个Activity时,会创建多个该Activity的实例,系统会按照先进后出的原则,将它们一一放进任务栈中,然后我们按back键,系统就会将栈顶的Activity移除栈,直 ...

  6. 开涛spring3(6.5) - AOP 之 6.5 AspectJ切入点语法详解

    6.5.1  Spring AOP支持的AspectJ切入点指示符 切入点指示符用来指示切入点表达式目的,,在Spring AOP中目前只有执行方法这一个连接点,Spring AOP支持的Aspect ...

  7. 12款Linux系统恢复工具

    电脑死机,硬盘崩溃,花巨大的money搞个急救保护器……这都是计算机的阴暗面.时间一直这样走着,走着,不定哪天背点儿.对于电脑损坏造成的损失,着急抓狂毫无意义.相反,使用恰当的工具反而会最小化损失.你 ...

  8. js继承之借用构造函数继承

    我的上一篇文章介绍了,原型链继承模式.但是单纯的原型链模式并不能很好地实现继承. 一.原型链的缺点 1.1 单纯的原型链继承最大的一个缺点,来自于原型中包含引用类型的值. 本来,我们没有通过原型链实现 ...

  9. 利用 MUI开发app, 如何实现侧滑菜单及其主体部分上下滑动

     利用mui开发APP 之侧滑菜单主内容滚动问题 MUI作为开发者常用的框架之一,其号称最接近原生APP体验的高性能前端框架.因此利用mui开发移动APP,可以为开发者提供很大的便利和接近原生的体验. ...

  10. 20个php框架

    对于Web开发者来说,PHP是一款非常强大而又受欢迎的编程语言.世界上很多顶级的网站都是基于PHP开发的.本文我们来回顾一下20个2014年最优秀的PHP框架. 每一个开发者都知道,拥有一个强大的框架 ...