Spring-Aopgit
最近在整理一些資料,發現寫博客真是一件挺好的記憶方式。慢慢的總結,不過在看你們博客的時候發現博客中雖然都配上了例子,可是我的以爲沒有直接給源碼那麼簡單,因此若是是我親手實踐的,源碼都能在個人gitHub上找到。github
gitHub地址:git@github.com:xiaotiao/spring.gitspring
關於Aop的一些概念:數據庫
Aop就是面向切面編程,切面編程的大體意思就是在咱們的軟件系統中存在不少與邏輯業務不相關的但卻也很重要的部分,因爲不與邏輯業務相關,直接寫在業務裏不合適,你們想一想咱們最初寫JDBC程序的時候多痛苦呀,要寫一大推不相關的代碼。這也是spring聲明式事務的方便之處。編程
AOP術語:spa
這個也是挺繞的,我說說本身的理解吧,也不知道對不對。代理
切面(Aspect)定義了全部邏輯業務中必須的額外處理,固然切面這可能會有多個,說嚴謹些就是切面集合定義了全部邏輯業務中必須的額外處理。日誌
切面的好處顯而易見,方便維護,將全部與邏輯業務無關的匯聚一塊兒,多好。對象
通知(Advice),在要執行邏輯業務代碼的時候,通知就在切點(pointcut)處將切面的功能織入到邏輯業務中。blog
假若有代碼:
public void test(){//這兒要執行一些額外的必要操做,如打印日誌,數據庫 事務等等
.....
}
切點檢查到此處要執行通知,因而在此處將切面的一個或多個通知織入進來,(注意,可能不是所有通知)
因此通知就是定義了一個切面功能,以及什麼時候執行這些操做,就是執行順序。
在Spring中,有五種不一樣的通知:
Before
After
After-throwing
After-return
Around
其中around能夠共享狀態信息哦.
切點(pointcut)就是指定業務邏輯代碼在何處要執行通知(Advice)
織入代碼:spring Aop是經過運行時動態生成代理對象來完成代碼織入的。
具體能夠參考代碼