1. 程式人生 > 實用技巧 >第六章、以XML方式配置切面

第六章、以XML方式配置切面

除了使用AspectJ註解宣告切面,Spring也支援在bean配置檔案中宣告切面。這種宣告是通過aop名稱空間中的XML元素完成的。 正常情況下,基於註解的宣告要優先於基於XML的宣告。通過AspectJ註解,切面可以與AspectJ相容,而基於XML的配置則是Spring專有的。由於AspectJ得到越來越多的 AOP框架支援,所以以註解風格編寫的切面將會有更多重用的機會。

一、配置細節

在bean配置檔案中,所有的Spring AOP配置都必須定義在<aop:config>元素內部。對於每個切面而言,都要建立一個<aop:aspect>元素來為具體的切面實現引用後端bean例項。

切面bean必須有一個識別符號,供<aop:aspect>元素引用。

<bean id="calculatorLoggingAspect" class="com.jdy.spring2020.aop.CalculatorLoggingAspect"/>
   <aop:config>
      <aop:aspect id="calculatorLoggingAspect" order="0" ref="calculatorLoggingAspect">
       </aop:aspect>
   </aop:config>

二、宣告切入點

  1. 切入點使用<aop:pointcut>元素宣告。

  2. 切入點必須定義在<aop:aspect>元素下,或者直接定義在<aop:config>元素下。

    • 定義在<aop:aspect>元素下:只對當前切面有效

    • 定義在<aop:config>元素下:對所有切面都有效

  3. 基於XML的AOP配置不允許在切入點表示式中用名稱引用其他切入點。

<bean id="calculatorLoggingAspect" class="com.jdy.spring2020.aop.CalculatorLoggingAspect"
/>   <aop:config>   <aop:pointcut id="pointcut01" expression="execution( com.jdy.spring2020.scan.service.impl.ArithmeticCalculatorImpl.add(int,int))"/>   <aop:aspect id="calculatorLoggingAspect" order="0" ref="calculatorLoggingAspect">   </aop:aspect> </aop:config>

三、宣告通知

  1. 在aop名稱空間中,每種通知型別都對應一個特定的XML元素。

  2. 通知元素需要使用<pointcut-ref>來引用切入點,或用<pointcut>直接嵌入切入點表示式。

  3. method屬性指定切面類中通知方法的名稱

<bean id="calculatorLoggingAspect" class="com.jdy.spring2020.aop.CalculatorLoggingAspect"/>
  <aop:config>
      <aop:pointcut id="pointcut01" expression="execution( com.jdy.spring2020.scan.service.impl.ArithmeticCalculatorImpl.add(int,int))"/>
      <aop:aspect id="calculatorLoggingAspect" order="0" ref="calculatorLoggingAspect">
          <aop:after method="after" pointcut-ref="pointcut01">
        </
aop:after> </aop:aspect> </aop:config>