aop初探

在本週的項目中第一次嘗試了aop這個鼎鼎大名的東西,之前一直以爲這個東西會很難理解,就沒有接觸,不過再真正接觸之後發現基本的使用仍是很簡單的,固然有這種感受少不了學長的幫助,感謝張喜碩學長。spring

aop

aop是什麼呢?用於幹什麼?post

AOP的理念:就是將分散在各個業務邏輯代碼中相同的代碼經過橫向切割的方式抽取到一個獨立的模塊中。

clipboard.png

即aop的做用就是去掉代碼的冗餘,使程序的結構更加清晰。雖然去除冗餘代碼也可一經過抽象繼承來實現,但這會讓你繼承或實現一些和業務並不相關的類或接口。this

spring aop的用法

spring的aop是經過動態代理實現的。spa

代理模式

代理模式的定義以下:.net

爲其餘對象提供一種代理以控制對這個對象的訪問。

好比A對象要作一件事情,在沒有代理前,本身來作,在對A代理後,由A的代理類B來作。代理實際上是在原實例先後加了一層處理,這也是AOP的初級輪廓。
代理又分爲靜態代理和動態代理,這裏再也不細說,想要更深刻的瞭解能夠看看這篇文章代理

而要如何在spring中使用aop呢?不要着急,接着往下看:對象

首先

即是要知道切面應該用在那了,對此你可使用不少方法:blog

execution:用於匹配方法執行的鏈接點;
within:用於匹配指定類型內的方法執行;
this:用於匹配當前AOP代理對象類型的執行方法;注意是AOP代理對象的類型匹配,這樣就可能包括引入接口也類型匹配;
target:用於匹配當前目標對象類型的執行方法;注意是目標對象的類型匹配,這樣就不包括引入接口也類型匹配;
args:用於匹配當前執行的方法傳入的參數爲指定類型的執行方法;
@within:用於匹配因此持有指定註解類型內的方法;
@target:用於匹配當前目標對象類型的執行方法,其中目標對象持有指定的註解;
@args:用於匹配當前執行的方法傳入的參數持有指定註解的執行;
@annotation:用於匹配當前執行方法持有指定註解的方法;

就像這樣:繼承

clipboard.png

固然關於各個參數的具體用法,能夠另寫一篇文章了,若是想要了解能夠參看這篇文章接口

在上面的方法中就是切了有HostOwnerCheck這個註解的方法

clipboard.png

而後

而後就是編寫你對這個方法有些什麼操做,能夠分別編寫方法執行前,執行後……要作什麼
好比下面就是
方法執行前判斷是否有權限,若是沒有就拋出一個方法:
clipboard.png
這樣,一個簡單的切面就完成了。

參考文章

Spring AOP就是這麼簡單啦
spring AOP是什麼?你都拿它作什麼?

相關文章
相關標籤/搜索