8.4.5 基于注解的 零配置 方式 5. After增强处理
Spring
还提供了一个After
增强处理,它与AfterReturning
增强处理有点相似,但也有区别。
AfterReturning
增强处理只有在目标方法成功执行结束后才会被织入After
增强处理不管目标方法如何结束,它都会被织入。PS
:方法结束包括成功执行结束
或遇到异常中止
这两种情况。
因为不论一个方法是如何结束的, After
增强处理都会被织入,因此After
增强处理必须准备处理正常返回
和异常返回
两种情况,这种增强处理通常用于释放资源。After
增强处理有点类似于finally
块。
使用@After
注解修饰一个方法,即可将该方法转成After
增强处理。使用@After
注解时需要指定个value
属性,该属性值用于指定该增强处理被织入的切入点,既可是一个已有的切入点,也可直接指定切入点表达式。
程序示例
1 | E:\workspace_QingLiangJiJavaEEQiYeYingYongShiZhang5\After |
下面的程序将定义一个After
增强处理。
1 | package org.crazyit.app.aspect; |
上面程序中的粗体字代码定义了一个After
增强处理,不管切入点的目标方法如何结束,该增强处理都会被织入。该示例程序的目标对象依然使用Hellolmpl
、 WorldImpl
类, HelloImpl
组件中的deleteUser()
方法会因为抛出异常而结束。
主程序依然使用长度-2
作为deleteUser()
方法的参数,此时将可以看到如图8.3所示的效果。
1 | 执行Hello组件的addUser添加用户:悟空 |
After增强特别特别适合用于资源回收
从图8.13中可以看出,虽然deleteUser
方法因为legalArgumentException
异常结束,但After
增强处理依然被正常织入。由此可见,After
增强处理的作用非常类似于异常处理中finally
块的作用—无论如何,它总会在方法执行结束之后被织入,因此特别适用于进行资源回收。