欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

SpringAOP的使用方法

Spring AOP怎么用?相信很多人對Spring AOP使用方法的了解處于一知半解狀態(tài),小編給大家總結了以下內(nèi)容。如下資料是關于Spring AOP使用方法的內(nèi)容。

10年積累的成都網(wǎng)站制作、網(wǎng)站設計經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先網(wǎng)站設計后付款的網(wǎng)站建設流程,更有尼木免費網(wǎng)站建設讓你可以放心的選擇與我們合作。

Java在面向對象的世界里無限風光,oop成就了無數(shù)經(jīng)典的軟件,它讓我們的軟件更健壯,更易于維護,但是程序猿對軟件的質量追求是永無止境的,oop對于業(yè)務的抽象和封裝完美的無懈可擊

然而對于系統(tǒng)層面的一些需求比如系統(tǒng)日志,性能統(tǒng)計等,分散在軟件的各個角落,維護起來很是不爽,這種問題的解決確是oop力所不能及的,于是AOP橫空出世

先來看一個簡單的小例子,體會一下AOP能解決什么問題:

如果我們要在A,B,C三個類的do方法中都加入日志功能

定義一個日志類Record,加日志的方法:addRecord

 

Public class A{

        Public void do(){

               …

               Record.addRecord();//添加日志

        }

}

Public class B{

        Public void do(){

               …

               Record.addRecord();//添加日志

        }

}

Public class C{

        Public void do(){

               …

               Record.addRecord();//添加日志

        }

}

這樣做可以解決問題,但是總感覺有些別扭,每個類的do方法中都調(diào)用了添加日志的方法,添加日志的方法不是我們的核心業(yè)務,我們卻要去處理它

隨著系統(tǒng)越來越完善,類似這樣的非核心業(yè)務也會越來越多,比如權限,異常處理,性能監(jiān)控等

這樣的功能出現(xiàn)在很多類的很多方法中干擾了我們的核心業(yè)務代碼,怎么解決呢?AOP就是為此而生:

看看AOP是如何解決的?

Spring AOP的使用方法

從上圖可以看出對于日志記錄,性能監(jiān)控,異常處理這樣的非核心功能,單獨被抽取出來,與業(yè)務代碼分離,橫切在核心業(yè)務代碼之上

這就是我們通常所說的面向切面編程(AOP),通過一個例子看看他是如何實現(xiàn)的

創(chuàng)建一個UserDao類:

 

@Repository

public classUserDao {
   public voidaddUser(){
        System.out.println("添加用戶");
    }
   public voidupdateUser(){
        System.out.println("修改用戶");
    }
   public voiddeleteUser(){
        System.out.println("刪除用戶");
    }
}

創(chuàng)建一個切面類:

@Aspect
public classMyAspectLog {
   /**
     *方法執(zhí)行完后執(zhí)行的方法
     */
   
@After(value="execution(* cn.xh.dao.UserDao.addUser(..))")
   public voidlog(){
        System.out.println("記錄日志");
    }
}
在spring配置文件中加入:
<!-- 啟動@aspectj的自動代理支持-->
    <aop:aspectj-autoproxy />
 
    <!-- 定義aspect類 -->
    <bean name="myAspect" class="cn.xh.dao. MyAspectLog "/>
 
 

當我們創(chuàng)建UserDao的對象userDao調(diào)用addUser方法的時候會打印“添加用戶”,“記錄日志”很神奇吧,究竟發(fā)生了什么?

明明addUser方法里面只有打印”添加用戶”啊

這就是Spring AOP的強大之處,在運行時通過動態(tài)代理技術對UserDao的addUser方法進行了增強,添加了記錄日志的功能。

動態(tài)代理其實就是在運行時動態(tài)的生成目標對象的代理對象,在代理對象中對目標對象的方法進行增強,關于動態(tài)代理技術我會在另一篇文章中詳細介紹,現(xiàn)在先來看一下AOP中幾個重要的概念:

一:通知:就是會在目標方法執(zhí)行前后執(zhí)行的方法

上面這個例子中:

@After(value="execution(* cn.xh.dao.UserDao.addUser(..))")
   public voidlog(){
        System.out.println("記錄日志");
    }
這個方法就是通知,目標方法是UserDao類的addUser(),在addUser執(zhí)行之后執(zhí)行了log方法,所以log方法是后置通知,通過在方法上加上@After注解來表示。

通過通知和目標方法的執(zhí)行順序我們可以把通知分為五種:

前置通知(before):在目標方法執(zhí)行之前執(zhí)行。

后置通知(after):在目標方法執(zhí)行之后執(zhí)行

后置返回通知(after returning):在目標方法返回之后執(zhí)行,先執(zhí)行后置通知再執(zhí)行后置返回通知。

這三種通知的執(zhí)行順序如下:

 

 

try{
    try{
        //@Before
        method.invoke(..);
    }finally{
        //@After
    }
    //@AfterReturning
}catch(){
    //@AfterThrowing
}

 

異常通知(after throwing):在目標方法拋出異常時執(zhí)行

環(huán)繞通知(around):在目標函數(shù)執(zhí)行中執(zhí)行

二:切入點應用通知進行增強的目標方法

現(xiàn)在面臨的問題是如何去描述這個需要被增強的目標方法,如果只是一個具體的方法需要增強那簡單,通過類名和方法名找到它就可以了,但是往往真實的需求中很多方法需要同樣的通知進行增強,Spring AOP為我們提供了一個描述方法的語法比如上例中的:

@After(value="execution(* cn.xh.dao.UserDao.addUser(..))")

execution(* cn.xh.dao.UserDao.addUser(..)就是用來描述需要應用通知的方法的。這里的含義是cn.xh.dao包UserDao類中的參數(shù)任意,返回值任意的addUser方法。

關于這種描述更多具體的寫法我會在另一篇文章中詳述。

三:連接點:連接點就是可以應用通知進行增強的方法

因為Spring Aop只能針對方法進行增強,所以這里的連接點指的就是方法,一旦連接點被增強,它就成為了切入點。

如上例中的:

public voidaddUser(){
        System.out.println("添加用戶");
    }
   public voidupdateUser(){
        System.out.println("修改用戶");
    }
   public voiddeleteUser(){
        System.out.println("刪除用戶");
    }
三個方法都是連接點。

四:切面:是切入點和通知的結合

可以用切面類來表示:

@Aspect
public classMyAspectLog {
   /**
     *方法執(zhí)行完后執(zhí)行的方法
     */
   
@After(value="execution(* cn.xh.dao.UserDao.addUser(..))")
   public voidlog(){
        System.out.println("記錄日志");
    }
}

在這個類中既包含了切入點addUser又包含了通知:log().

看完上述內(nèi)容,你們掌握Spring AOP的使用方法了嗎?如果還想學到更多技能或想了解更多相關內(nèi)容,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

當前題目:SpringAOP的使用方法
URL地址:http://aaarwkj.com/article46/igepeg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供標簽優(yōu)化、定制開發(fā)、小程序開發(fā)、網(wǎng)站營銷網(wǎng)頁設計公司、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)
在线观看永久免费黄色| 久久午夜福利欧美视频| 国产熟女肥臀精品国产馆乱| 日韩一区中文字幕久久| 国产三级国产精品三级| 日韩一区二区三区av在线| 亚洲视频一区二区精品| 毛茸茸的阴户在线观看| 久久综激情丁香开心婷婷| 亚洲少妇熟女一区二区三区| 内射极品美女在线观看| 国产精品伦一区二区三级| 午夜少妇久久久久久久久| 亚洲欧美丝袜清纯另类| 亚洲国产日韩欧美视频| 精品人妻二区中文字幕| 男人午夜影视在线观看| 素人人妻一区二区三区| 女同毛片一区二区三区| 亚洲七七久久精品中文国产| 色呦呦视频在线免费观看| 日韩欧美二区三区精品在线| 国产在线成年人免费观看| 日本女同一区二区高清| 97人妻人人澡人人添人人爽| 成人精品国产一区二区 | 丝袜美腿一区在线播放| 天天操天天干蜜桃av| 丰满人妻熟妇乱精品视频| 一级黄片电影中文字幕| 国产剧免费看视频网站成人| 色久悠悠婷婷综合在线亚洲| 高清av中文免费在线| 日韩三级黄片在线观看| 久久久亚洲精品中文字幕蜜桃| 人人妻人人澡人人爱| 日韩暴露一区二区三区| 久久国产高清亚洲电影| 国产成人综合亚洲不卡| 18禁视频免费无遮挡| 国产精品日韩欧美一区二区|