8.4.5 基于注解的 零配置 方式 3. 定义AfterReturning增强处理
8.4.5 基于注解的 零配置 方式 3. 定义AfterReturning增强处理
类似于使用@Before
注解可修饰Before
增强处理,使用@AfterReturning
可修饰AfterReturning
增强处理, AfterReturning
增强处理将在目标方法正常完成后被织入
@AfterReturning注解属性
使用@AfterReturning
注解可指定如下两个常用属性。
属性 | 描述 |
---|---|
pointcut或者value |
这两个属性的作用是一样的,它们都用于指定该切入点对应的切入表达式。样既可是一个已有的切入点,也可直接定义切入点表达式。当指定了pointcut 属性值后, value 属性值将会被覆盖。 |
returning |
该属性值指定一个形参名,用于表示Advice 方法中可定义与此同名的形参,**该形参可用于访问目标方法的返回值 **。除此之外,在Advice 方法中定义该形参(代表目标方法的返回值)时指定具体类型 ,会限制目标方法必须返回该类型的值 。 |
程序示例
1 | E:\workspace_QingLiangJiJavaEEQiYeYingYongShiZhang5\AfterReturning |
下面的程序定义了一个AfterReturning
增强处理。
1 | package org.crazyit.app.aspect; |
正如在上面的程序中看到的,程序中使用@AfterReturning
注解时,指定了一个returning
属性,该属性值为rvt
,这表明允许在Advice
方法(log()
方法)中定义名为rvt
的形参,程序可通过rvt
形参来访问目标方法的返回值。
运行该应用的主程序,控制台输出如下:
1 | 执行Hello组件的addUser添加用户:孙悟空 |
returning属性接收目标方法的返回值
@AfterReturning
注解的returning
属性所指定的形参名必须对应于增强处理中的一个形参名,当目标方法执行返回后,返回值作为相应的参数值传入增强处理方法。
returning属性限制切入点只匹配特定返回值的方法
使用returning
属性还有一个额外的作用:它可用于限定切入点只匹配具有对应返回值类型的方法,假如在上面的log()
方法中定义rvt
形参的类型是String
,则该切入点只匹配org.crazyit.appservice.impl
包下返回值类型为**String
的方法或者没有返回值的方法**。当然,上面log()
方法的rvt
形参的类型是Object
,这表明该切入点可匹配任何返回值类型的方法.
AfterReturning增强不能改变目标方法的返回值
注意:虽然AfterReturning
增强处理可以访问到目标方法的返回值,但它不可以改变目标方法的返回值