spring實現(xiàn)aop

AOP相關術語

先了解AOP的相關術語:

1. 通知(Advice):

通知定義了切面是什么以及何時使用嘶卧。描述了切面要完成的工作和何時需要執(zhí)行這個工作嚷闭。

2. 連接點(Joinpoint):

程序能夠應用通知的一 個“時機”苛吱,這些“時機”就是連接點扣典,例如方法被調(diào)用時唆鸡、異常被拋出時等等兄裂。

3. 切入點(Pointcut)

通知定義了切面要發(fā)生的“故事”和時間池凄,那么切入點就定義了“故事”發(fā)生的地點抡驼,例如某個類或方法的名稱,spring中允許我們方便的用正則表達式來指定

4. 切面(Aspect)

通知和切入點共同組成了切面:時間肿仑、地點和要發(fā)生的“故事”

5. 引入(Introduction)

引入允許我們向現(xiàn)有的類添加新的方法和屬性(spring提供了一個方法注入的功能)

6. 目標(Target)

即被通知的對象致盟,如果沒有AOP,那么它的邏輯將要交叉別的事務邏輯碎税,有了AOP之后它可以只關注自己要做的事(AOP讓他做愛做的事)

7. 代理(proxy)

應用通知的對象,詳細內(nèi)容參見設計模式里面的代理模式

8. 織入(Weaving)

把切面應用到目標對象來創(chuàng)建新的代理對象的過程馏锡,織入一般發(fā)生在如下幾個時機:
(1) 編譯時:當一個類文件被編譯時進行織入雷蹂,這需要特殊的編譯器才可以做的到,例如AspectJ的織入編譯器
(2) 類加載時:使用特殊的ClassLoader在目標類被加載到程序之前增強類的字節(jié)代碼
(3) 運行時:切面在運行的某個時刻被織入,SpringAOP就是以這種方式織入切面的杯道,原理應該是使用了JDK的動態(tài)代理技術

基本步驟

  1. 創(chuàng)建通知:實現(xiàn)這幾個接口匪煌,把其中的方法實現(xiàn)了
  2. 定義切點和通知者:在Spring配制文件中配置這些信息
  3. 使用ProxyFactoryBean來生成代理

實現(xiàn)例子

首先一個Sleepable接口
public interface Sleepable{
    void sleep(); 
}
然后寫一個human類實現(xiàn)這個接口
public Human implements Sleepable{
   public void sleep(){
      System.out.println("睡覺了");
   }
}

最基本的是脫穿衣服,失眠的人還要吃安眠藥什么的,但是這些動作與純粹的睡覺這一“業(yè)務邏輯”是不相干的党巾,如果把這些代碼全部加入到sleep方法中萎庭,是不是有違單一職責呢?昧港,這時候我們就需要AOP了擎椰。

編寫一個SleepHelper類,它里面包含了睡覺的輔助工作,用AOP術語來說它就應該是通知(Advice)了创肥,我們需要實現(xiàn)上面的接口
public class SleepHelper implements MethodBeforeAdvice,AfterReturningAdvice{
    public void before(Method mtd, Object[] arg1, Object arg2)
            throws Throwable {
        System.out.println("通常情況下睡覺之前要脫衣服");
    }
    public void afterReturning(Object arg0, Method arg1, Object[] arg2,
            Object arg3) throws Throwable {
        System.out.println("起床后要先穿衣服");
    }
}

然后在bean.xml中進行配置

<bean id="sleepHelper" class="test.spring.aop.bean.SleepHelper">
</bean>

這樣就創(chuàng)建了一個advice

進一步配置
    <aop:config>
        <aop:pointcut expression="execution(* com.gavin.exam.service..*.*(..))" id="pc"/>
        <!--  advisor的配置
        <aop:advisor pointcut-ref="pc" advice-ref="logMethodTimeAdvice" order="1"/>
         -->
      <!--aspect 的配置-->
        <aop:aspect id="logMethodTimeAspect" ref="logMethodTimeAspect">
            <aop:pointcut expression="execution(* com.gavin.exam.service..*.*(..))" id="businessService"/>
            <aop:after pointcut-ref="businessService" method="doAfter"/>
            <aop:around pointcut-ref="businessService" method="doAround"/>
        </aop:aspect>
    </aop:config>

其中Pointcut定義了切入點达舒,代表了生效的范圍。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叹侄,一起剝皮案震驚了整個濱河市巩搏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌趾代,老刑警劉巖贯底,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異撒强,居然都是意外死亡禽捆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門飘哨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胚想,“玉大人,你說我怎么就攤上這事芽隆∽欠” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵胚吁,是天一觀的道長牙躺。 經(jīng)常有香客問我,道長腕扶,這世上最難降的妖魔是什么孽拷? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蕉毯,結果婚禮上乓搬,老公的妹妹穿的比我還像新娘思犁。我一直安慰自己,他們只是感情好进肯,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布激蹲。 她就那樣靜靜地躺著,像睡著了一般江掩。 火紅的嫁衣襯著肌膚如雪学辱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天环形,我揣著相機與錄音策泣,去河邊找鬼。 笑死抬吟,一個胖子當著我的面吹牛萨咕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播火本,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼危队,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了钙畔?” 一聲冷哼從身側響起茫陆,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎擎析,沒想到半個月后簿盅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡揍魂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年桨醋,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片现斋。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡讨盒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出步责,到底是詐尸還是另有隱情,我是刑警寧澤禀苦,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布蔓肯,位于F島的核電站,受9級特大地震影響振乏,放射性物質(zhì)發(fā)生泄漏蔗包。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一慧邮、第九天 我趴在偏房一處隱蔽的房頂上張望调限。 院中可真熱鬧舟陆,春花似錦、人聲如沸耻矮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽裆装。三九已至踱承,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哨免,已是汗流浹背茎活。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留琢唾,地道東北人载荔。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像采桃,于是被迫代替她去往敵國和親懒熙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容