Spring AOP 包括如下类型的建议:
-
Before advice:在连接点之前执行的建议。它没有能力阻止连接点的执行。
-
After returning advice:在连接点正常执行后执行。
-
After throwing advice:在方法抛出异常的时候执行。
-
After (finally) advice:在一个连接点执行后执行,不管这个连接点是怎样退出的。正常或者异常返回,都会执行。
-
Around advice:一个在连接点周围执行的建议。这个是最强大的一种建议。
-
Around advice 能够在方法调用的时候自定义一下行为。他负责选择继续执行这个连接点,或者通过返回自己的值或者抛出异常来截断这个被建议的方法的执行。
Around advice 是最普通的一种建议。因为Spring AOP,也像 Aspectj一样,提供了全部范围的建议类型。我们推荐你用最少能力的建议类型。比如,你只是想利用方法的返回值更新一个缓存,此时你用returning advice 会比around advice 更加好,即使around advice 也能够实现相同的事情。使用最具体的一个建议类型能够提供一个简单的编程模型,同时提供更少的潜在错误。比如:你不需要在用来实现around advice 的joinPoint 中 调用 proceed() 方法。所以,不调用,就不会发生任何错误。
所有的建议参数都是在编译的时候就确定的类型,所以你在使用适合的类型建议参数,而不是一些 object 数组。
切入点匹配连接点的概念是AOP的关键。它可以使AOP和一些只提供拦截的老的技术区分开来。切入点使得建议不依赖面向对象的目标层级。比如,你可以通过声明事务管理给一系列的在不同的对象的方法提供around advice 。(比如所有的在服务层的商务操作)。