關於面向切面程式設計的個人理解
最近學習了面向切面的程式設計,打算說一說自己對於這個問題的理解,如果過程中出現錯誤,望指正
我採用的是spring框架,進行程式設計的,拿JAVA中比較基礎的檔案操作來作為例子:
首先要建立一個檔案管理類,就是對於檔案進行增刪改查等基礎操作,此處對於查詢增加了特定單詞識別選項;
在檔案管理類之後,要建立主函式,這裡面我們要做基本的操作,比如給使用者選項一類的,使用者通過選擇,不同的選擇對應不同的函式呼叫;接下來就是對於切面類的定義,切面類通過切點進行某個類內具體某個或者任意函式被呼叫後,通過自己的語句進行進一步的操作,這裡比如說刪除檔案,正常的刪除檔案都會直接刪除,但是考慮到人性化,就需要進行刪除前的刪除檢查,即提問,是否刪除,那麼這個就需要@Before語句的支援了,我們需要在呼叫delete()方法之前就進行詢問操作,所以這個就需要在前置語句中定義了,這是部分示例:
對於部分錯誤,例如我們的地址或者檔名輸入錯誤,那麼就要進行提示,這裡就需要@AfterThrowing的支援,通過捕獲異常來通過異常反應自己的錯誤
更通用的一個就是日誌檔案,使用者對檔案都做了什麼,使用者對於系統都做了什麼正常來講都是要進行記錄的,這樣一方面能夠防止不法行為,另一方面便於對於資料的逆向恢復,所以就可以在@Before和@AfterReturning中定義一系列的方法來把使用者的行為寫入到日誌檔案中:
還有一點就是配置類,這個也是很需要的,舉個例子,這是對於此問題的配置類:
面向切面的變成和麵向物件的程式設計差別很大,面向物件是以物件為中心,但是面向切面的程式設計的話更注重對我們過程執行的前後和中間發生的一切進行控制、檢測、監控,比如Before,就是在指定方法進行執行之前就會執行的,AfterReturning是針對指定過程執行完畢並返回之後才會進行操作,Around可以用於在操作之前進行判定,成功之後才執行,AfterThrowing是指定方法丟擲異常之後執行的。
對於簡單的面向物件程式設計,這幾種操作基本上是足夠的,但是一定需要做的就是在切面類定義時第一件事就是定義自己的切點,即Pointcut在哪裡,如果沒有切點,那麼後面就會報錯“找不到切點”一類的,其他幾個操作都是基於切點進行的:
還有一件事在實際操作過程中容易發生錯誤的就是配置檔案類,這個很重要,是把切面類和操作類進行new,並且作為bean。
也許有時候會需要在一個比較基礎的程式框架上進行更改並且增加自己的操作,但是很重要的一點就是如果更改了自己的package的名字,那麼一定要在app-context.xml檔案中對於自己的包名進行更新,否則也會發生報錯的。