Spring AOP(二)之AfterReturning增强处理

类似于使用@Before注解可以修饰Before增强处理,使用@AfterReturning可修饰AfterReturning增强处理,AfterReturning增强处理将在目标方法正常完成后被织入。

使用@AfterReturning注解可指定如下两个常用属性。

1)        pointcut/value:这两个属性的作用是一样的,它们都属于指定切入点对应的切入表达式。一样既可以是已有的切入点,也可直接定义切入点表达式。当指定了pointcut属性值后,value属性值将会被覆盖。

2)        returning:该属性指定一个形参名,用于表示Advice方法中可定义与此同名的形参,该形参可用于访问目标方法的返回值。除此之外,在Advice方法中定义该形参(代表目标方法的返回值)时指定的类型,会限制目标方法必须返回指定类型的值或没有返回值。

 

下面的程序定义 了一个AfterReturnig增强处理。

// 定义一个切面
@Aspect
public class LogAspect
{
	// 匹配com.owenapp.service.impl包下所有类的、
	// 所有方法的执行作为切入点
	@AfterReturning(returning="rvt"
		, pointcut="execution(* com.owen.app.service.impl.*.*(..))")
	// 声明rvt时指定的类型会限制目标方法必须返回指定类型的值或没有返回值
	// 此处将rvt的类型声明为Object,意味着对目标方法的返回值不加限制
	public void log(Object rvt)
	{
		System.out.println("获取目标方法返回值:" + rvt);
		System.out.println("模拟记录日志功能...");
	}
}

上面的程序中使用@AfterReturning注解时,指定了一个returning属性,该属性值为rvt,这表明允许在Advice方法(log()方法)中定义名为rvt的形参,程序可通过rvt形参来访问目标方法的返回值。

该应用的目标Bean类,依然是HelloImpl.java和WorldImple.java,这两个类与SpringAOP(一)Before增强处理中的类是一样的,这里就写出,读者可以到前面章节参考。

执行结果如下。
[java] 信息:Loading XML bean definitions from class path resource…
[java]执行Hello组件的foo()方法
[java]获取目标方法返回值:null
[java]模拟记录日志功能…
[java]执行Hello组件的addUser添加用户:owen
[java]获取目标方法返回值:20
[java]模拟记录日志功能…
[java]执行World组件的bar()方法
[java]获取目标方法返回值:null
[java]模拟记录日志功能…

 注意:

虽然AfterReturning增强处理可以访问到方法的返回值,但它不可以改变目标方法的返回值。



你可能感兴趣的:(SSH,Spring,java,jsp,web应用,Spring4)