Spring 學習筆記(八)AOP 之XML方式
阿新 • • 發佈:2018-12-16
術語先來一發
- 目標物件(Target)
- 代理物件(Proxy)
- 連線點(Joinpoint)
- 切入點(Pointcut)
- 通知(增強)(Advice)
- 切面(Aspect、Advisor)
- 織入、切入(weaving)
第一步,建立目標類和切面類, 這倆類就是普通類, 包含各自的方法,沒有涉及到註解配置啥的
第二步,在applicationContext.xml中新增相關配置
<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!--注意名稱空間和約束--> <!--1. 建立目標物件--> <bean id="sadamu" class="org.spring.exampleAOP.Sadamu" /> <!--2. 建立代理物件--> <bean id="myAspect1" class="org.spring.exampleAOP.MyAspect1"/> <!--3. 配置AOP切面--> <aop:config> <!--切面 = 通知 + 切入點 --> <aop:aspect ref="myAspect1"> <!--如果報錯,首先檢查 execution這個英文單詞寫沒寫對!!!--> <aop:pointcut expression="execution( * org.spring.exampleAOP.Sadamu.*(..))" id="pt"/> <aop:before method="log" pointcut-ref="pt"/> </aop:aspect> </aop:config> </beans>
第三步,測試
package org.spring.exampleAOP; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; public class Test { public static void main(String[] args) { ApplicationContext applicationContext1 = new FileSystemXmlApplicationContext("./src/applicationContext.xml"); //獲取Bean物件 People people1 = (People) applicationContext1.getBean("sadamu"); people1.Shoot(); } }
結果:
記錄日誌
薩達姆開槍了
Process finished with exit code 0
ps: 如果報錯,首先檢查 execution這個英文單詞寫沒寫對.
關於切入點表示式execution(這一段)
- 匹配所有就寫*號,如果訪問型別修飾符和返回值都不限制的話就寫一個*號就行了;
- 引數,..代表匹配所有;
- 一個*代表匹配只有一個引數的方法並不限制類型;
- (*,String) 代表匹配第一個引數不限制,第二個引數是String型別的所有方法
通知型別
前置通知:在方法執行前觸發
最終通知:在方法執行後觸發,無論方法是否丟擲異常
後置通知:在方法執行後觸發,方法出現異常就不執行了
異常通知:在方法出現異常後觸發
環繞通知:在方法執行前和執行後觸發