天天看点

spring学习笔记(8)AOP增强(advice)配置与应用增强类型前置增强和后置增强配置环绕增强配置异常增强配置

增强(advice)主要包括如下五种类型

1. 前置增强(beforeadvice):在目标方法执行前实施增强

2. 后置增强(afterreturningadvice):在目标方法执行后实施增强

3. 环绕增强(mrthodinterceptor):在目标方法执行前后实施增强

4. 异常抛出增强(throwsadvice):在目标方法抛出异常后实施增强

5. 引介增强(introductionintercrptor):在目标类中添加一些新的方法和属性

下面通过实例代码来分析前置增强,假如现在要作日志记录,记录了什么人调用什么方法。前置增强的配置可归纳为如下步骤:

peoxyfactorybean是factorybean的实现类,我们知道factorybean负责初始化bean,而proxyfactorybean则负责为其他bean创建代理实例,通过在xml中配置后注入使用

测试打印:

前置日志记录: zenghao调用了speak方法,传入参数为:21 hello i’m 21 years old 后置日志记录: zenghao调用了speak方法,返回值为:i’m return value

在前面的基础上,我们新增环绕增强类:

在aop.xml中类似前置增强增加环绕增强配置,运行测试方法,得到结果:

21——public abstract java.lang.string test.aop.itarget.speak(java.lang.integer)——class test.aop.target——speak 环绕增强调用结束 后置日志记录: zenghao调用了speak方法,返回值为:i’m around return value 从以上我们能看到,当同时使用环绕增强和前后置增强时,它们的执行顺序

常用场景为配置实物管理器,当进行数据库操作的方法发生异常时,可被异常增强捕获,进行失误回滚等操作。一个抛出异常增强的实例如下所示:

其中有几点是需要注意的: 1. 方法名必须为:afterthrowing 2. 三个入参method method, object[] args, object target 要么一起提供,要么都不提供,而最后一个入参必须为throwable或其子类。当目标对象抛出异常时,增强会调用相似度最高的匹配异常类的方法(在类的继承树上,两个类的距离越近,相似度就越高)

关于引介增强,它可以动态地为类增加新的接口或方法,具有难以想象的动态特性,在后面的学习中我们会再单独提到。