电竞比分网-中国电竞赛事及体育赛事平台

分享

spring AOP與注解處理

 印度阿三17 2019-07-15

Spring IoC 的實(shí)現(xiàn)機(jī)制:

Spring 中的 IoC 的實(shí)現(xiàn)原理就是工廠模式加反射機(jī)制。

?

核心概念

連接點(diǎn),切點(diǎn),切面(類),織入(動(dòng)態(tài)代理對(duì)象,約定流程),五種通知,原有目標(biāo)對(duì)象方法以及參數(shù)。

要對(duì)哪些類的哪些方法進(jìn)行增強(qiáng).

通過(guò)注解標(biāo)識(shí)通知類型。

?

spring AOP原理:把當(dāng)前方法織入某個(gè)流程中。

當(dāng)然@Transacation這只是AOP的一種約定編程,被它注解的代碼說(shuō)明需要開(kāi)啟事務(wù)運(yùn)行,Spring幫你把insertUser方法織入類似上圖的流程中,數(shù)據(jù)庫(kù)連接的打開(kāi)和關(guān)閉以及事務(wù)管理都由它給你默認(rèn)實(shí)現(xiàn),也就是它可以將大量重復(fù)的流程通過(guò)約定的方式抽離出來(lái),然后給與默認(rèn)實(shí)現(xiàn)。例如這里的數(shù)據(jù)庫(kù)打開(kāi)釋放,事務(wù)的處理和大量的try…catch…finally語(yǔ)句代碼塊。

這里沒(méi)有任何數(shù)據(jù)庫(kù)打開(kāi)和關(guān)閉的代碼,也沒(méi)有事務(wù)回滾和提交的代碼,卻實(shí)現(xiàn)了數(shù)據(jù)庫(kù)資源的打開(kāi)和關(guān)閉以及事務(wù)的回滾和提交。(開(kāi)啟事務(wù)的回滾和提交)

數(shù)據(jù)庫(kù)資源的打開(kāi)和關(guān)閉是由誰(shuí)做的?

連接點(diǎn)(join point )

切點(diǎn):一系列連接點(diǎn),需要通過(guò)正則表達(dá)式進(jìn)行匹配。

  • 通知(advice): 就是按照約定的流程下的方法,分為前置通知(before advice),后置通知(after advice),環(huán)繞通知(around advice),事后返回通知(afterReturning advice),異常通知(afterThrowing advice),它會(huì)根據(jù)約定織入流程中,需要弄明白它們?cè)诹鞒讨械捻樞蚝瓦\(yùn)行的條件。(約定流程下的方法)

織入(weaving):它是一個(gè)通過(guò)動(dòng)態(tài)代理技術(shù),為原有服務(wù)對(duì)象生成代理對(duì)象,然后將與切點(diǎn)定義匹配的連接點(diǎn)攔截,并按照約定將各類通知織入約定流程的過(guò)程。

通過(guò)反射機(jī)制實(shí)現(xiàn)動(dòng)態(tài)代理。

首先要確定需要攔截什么方法,讓它能織入約定的流程中。

首先需要確定連接點(diǎn)(什么類的什么方法)的問(wèn)題。要對(duì)哪一個(gè)方法增強(qiáng)功能?

有了連接點(diǎn),我們還需要一個(gè)切面,通過(guò)它可以描述AOP的信息和流程的織入。(切面類)

切面類中使用注解標(biāo)識(shí)通知的類型。

?

六個(gè)注解,對(duì)應(yīng)五種通知類型。

環(huán)繞通知:取代原有目標(biāo)對(duì)象方法的通知,提供了回調(diào)原有目標(biāo)對(duì)象方法的能力。原有目標(biāo)對(duì)象

切點(diǎn)(Pointcut):向Spring描述哪些類的哪些方法需要啟動(dòng)AOP編程。代碼中,使用了注解@Pointcut來(lái)定義切點(diǎn)。

通過(guò)添加接口來(lái)增強(qiáng)接口的功能,檢驗(yàn)數(shù)據(jù)是否為空?

將原目標(biāo)對(duì)象方法的參數(shù)傳遞到前置通知里面。

織入:是一個(gè)生成動(dòng)態(tài)代理對(duì)象并且將切面和目標(biāo)對(duì)象方法變成成為約定流程的過(guò)程。通過(guò)約定可以將一些業(yè)務(wù)邏輯織入流程中,并且可以將一些通用的邏輯抽離出來(lái),然后給與默認(rèn)實(shí)現(xiàn)。

Spring采用了JDK和CGLIB實(shí)現(xiàn)動(dòng)態(tài)代理。

Spring可以支持多個(gè)切面的運(yùn)行。

現(xiàn)在我們想對(duì)sayHello方法進(jìn)行一個(gè)攔截,再方法的前后再增加一些方法,這些增加的方法和原方法sayHello組成一套約定的流程。

約定流程。

動(dòng)態(tài)代理

我們先理解一下什么是動(dòng)態(tài)代理。例如,當(dāng)你需要采訪一名兒童時(shí),首先需要經(jīng)過(guò)他父母的同意,在一些問(wèn)題上父母會(huì)替他回答,而另外一些問(wèn)題,父母覺(jué)得不太適合這個(gè)小孩會(huì)替孩子拒絕掉,顯然父母就是這名兒童的代理(proxy)。通過(guò)代理可以增強(qiáng)或者控制對(duì)真實(shí)對(duì)象的訪問(wèn)。代理模式的作用

?

來(lái)源:https://www./content-4-329901.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多