Spring AOP 中如何定义通知?

推荐答案

在 Spring AOP 中,通知(Advice)是通过注解或 XML 配置来定义的。通知的类型包括:

  1. 前置通知(Before Advice):在目标方法执行之前执行。
  2. 后置通知(After Returning Advice):在目标方法成功执行后执行。
  3. 异常通知(After Throwing Advice):在目标方法抛出异常后执行。
  4. 最终通知(After (Finally) Advice):在目标方法执行后执行,无论是否抛出异常。
  5. 环绕通知(Around Advice):在目标方法执行前后都执行,可以控制目标方法的执行。

使用注解定义通知

-- -------------------- ---- -------
------ ------------------------------
------ -----------------------------------------

-------
----------
------ ----- ------------- -

    -------------------- ------------------------------
    ------ ---- -------------- -
        -------------------------- ------ ------------
    -

    ------------------------ - ------------ ------------------------------ --------- - ---------
    ------ ---- --------------------------- ------- -
        ------------------------- ------ ---------- --------- - - --------
    -

    ----------------------- - ------------ ------------------------------ -------- - ------------
    ------ ---- ----------------------------- ---------- -
        ------------------------- ------ ---------- ------ ---------- - - ------------------------
    -

    ------------------- ------------------------------
    ------ ---- ------------- -
        ------------------------- ------ --------- ------------
    -

    -------------------- ------------------------------
    ------ ------ -------------------------------- ---------- ------ --------- -
        -------------------------- ------ --------- -----------
        ------ ------ - --------------------
        ------------------------- ------ --------- -----------
        ------ -------
    -
-

使用 XML 配置定义通知

-- -------------------- ---- -------
------------
    ----------- ------------------ ------------------------
        ------------- ------------------- ----------------------- -------------------------------
        
        ----------- --------------------- -------------------------------
        -------------------- ----------------------------- ----------------------------- --------------------
        ------------------- ---------------------------- ----------------------------- ----------------------
        ---------- -------------------- -------------------------------
        ----------- --------------------- -------------------------------
    -------------
-------------

----- ---------------------- ------------------------------------------

本题详细解读

1. 前置通知(Before Advice)

前置通知在目标方法执行之前执行。通常用于日志记录、权限检查等操作。

2. 后置通知(After Returning Advice)

后置通知在目标方法成功执行后执行。可以通过 returning 属性获取目标方法的返回值。

3. 异常通知(After Throwing Advice)

异常通知在目标方法抛出异常后执行。可以通过 throwing 属性获取抛出的异常对象。

4. 最终通知(After (Finally) Advice)

最终通知在目标方法执行后执行,无论是否抛出异常。通常用于资源释放等操作。

5. 环绕通知(Around Advice)

环绕通知在目标方法执行前后都执行,可以控制目标方法的执行。通过 ProceedingJoinPoint 对象可以调用目标方法,并获取其返回值或抛出异常。

注解与 XML 配置的对比

  • 注解:更加简洁,适合现代 Spring 应用,推荐使用。
  • XML 配置:适合需要动态配置的场景,或者在无法修改源代码的情况下使用。

通过以上方式,可以在 Spring AOP 中灵活定义各种通知,以实现横切关注点的模块化。

纠错
反馈