Spring还提供了一个After增强处理,它与AfterReturning增强处理有点相似,但也有区别:
1) AfterReturing增强处理只有在目标方法成功完成后才会被织入。
2) After增强处理不管目标方法如何结束(包括成功完成和遇到异常中止两种情况),它都会被织入。
下面的程序,我们定义一个After增强处理。
// 定义一个切面
@Aspect
public class ReleaseAspect
{
// 匹配com.owenapp.service包下所有类的、
// 所有方法的执行作为切入点
@After("execution(* com.owen.app.service.*.*(..))")
public void release()
{
System.out.println("模拟方法结束后的释放资源...");
}
}
该应用的目标Bean类,依然是HelloImpl.java类与Spring AOP(三)AfterThrowing增强处理中的类是一样的,这里就写出,读者可以到前面章节参考。
执行结果如下。
[java] 信息:Loading XML bean definitions from class path resource…
[java]执行Hello组件的foo()方法
[java]执行Hello组件的addUser添加用户:owen
[java]模拟方法结束后释放资源….
[java]Exception in thread “main” java.lang.IllegalArgumentException:
…..
总结:
After增强处理作用非常类似于异常处理中finally块的作用——无论如何,它总会在方法执行结束之后被织入,因此特别适用于进行资源回收。