第一步:在配置好的ioc容器的基礎上,導入面向切面程式設計所需要的jar包
(本案例用的是spring3.2.4,由于spring3.2.4的官網jar包中不再有依賴包,是以依賴包都是從網上找的)
第二步:配置applicationContext.xml(包括ioc對象配置,以及面向切面程式設計的相關配置)
View Code
第三步:在appliactionContext.xml中指定的面向切面程式設計的代理切面類。
第四步:測試面向切面程式設計的demo(省去了action,dao包下的類的源代碼)
測試截圖
AOP介紹
Aspect Oriented Programing 面向切面程式設計
(1)如果說面向對象程式設計是關注将需求功能劃分為不同的并且相對獨立,封裝良好的類,并讓它們有着屬于自己的行為,依靠繼承和多态等來定義彼此的關系的話;
(2)面向方面程式設計則是希望能夠将通用需求功能從不相關的類當中分離出來,能夠使得很多類共享一個行為,一旦發生變化,不必修改很多類,而隻需要修改這個行為即 可。
AOP主要應用于日志記錄,性能統計,安全控制,事務處理等方面。
(1)前面我們講的struts2中的攔截器,就是AOP的一種實作!
AOP的内部實作都是通過動态代理來實作。動态代理有兩種常見的方式:
1. JDK提供的代理生成方式(Proxy, InvocationHandle)
2. cglib 類庫(spring和hibernate使用它)
AOP基本概念
} 連接配接點(Joinpoint)
◦ 在程式執行過程中某個特定的點,比如某方法調用的時候或者處理異常的時候。 在Spring AOP中,一個連接配接點 總是 代表一個方法的執行。
} 切入點(Pointcut)
◦ 比對連接配接點(Joinpoint)的斷言(是一種連接配接點的條件,判斷特征)。通知和一個切入點表達式關聯,并在滿足這個切入點的連接配接點上運作(例如,當執行某個特定名稱的方法時)。切入點表達式如何和連接配接點比對是AOP的核心:Spring預設使用AspectJ切入點文法。
-->public void com.bjsxt.dao.userDao.*.*()
:所有userDao包下的無傳回值,無參數傳入的,公共方法
-->public *()
:所有的公共方法
-->public void com.bjsxt.dao.userDao.*.(..)
:所有userDao包下的有參傳入的無傳回值的,公共的方法。
} 通知(Advice)
◦ 在切面的某個特定的連接配接點(Joinpoint)上執行的動作。通知有各種類型,其中包括“around”、“before”和“after”等通知。
增強功能的代碼編寫區 。如日志記錄,通路控制,增強功能。
} 切面(Aspect)
◦ 一個關注點的子產品化,這個關注點可能會橫切多個對象。
包含了:連接配接點、切入點、通知。可以通過@Aspect定義為一個類
} 目标對象(Target Object)
說白話就是----》委托類
◦ 被一個或者多個切面(aspect)所通知(advise)的對象。也有人把它叫做被通知(advised) 對象。
} 織入(Weaving)
制作代理類,和代理對象的過程
◦ 把切面(aspect)連接配接到其它的應用程式類型或者對象上,并建立一個被通知(advised)的對象。
通知的類型
} 前置通知(Before advice)
◦ 在某連接配接點(join point)之前執行的通知,但這個通知不能阻止連接配接點前的執行(除非它抛出一個異常)。
} 傳回後通知(After returning advice)
◦ 在某連接配接點(join point)正常完成後執行的通知:例如,一個方法沒有抛出任何異常,正常傳回。
} 抛出異常後通知(After throwing advice)
◦ 在方法抛出異常退出時執行的通知。
} 後通知(After (finally)advice)
◦ 當某連接配接點退出的時候執行的通知(不論是正常傳回還是異常退出)。
} 環繞通知(Around Advice)
◦ 包圍一個連接配接點(join point)的通知,如方法調用。這是最強大的一種通知類型。 環繞通知可以在方法調用前後完成自定義的行為。它也會選擇是否繼續執行連接配接點或直接傳回它們自己的傳回值或抛出異常來結束執行。