最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Java三十九篇:回顧Spring(2)

2023-03-13 23:53 作者:小劉Java之路  | 我要投稿

SpringAOP

AOP:A是Aspect,表示切面。AOP就是面向切面編程的意思。

在業(yè)務(wù)層中為了對(duì)事務(wù)進(jìn)行管理,通常會(huì)有如下的代碼模板,而且是每一個(gè)業(yè)務(wù)層方法都需要執(zhí)行如下的步驟。

這樣出來(lái)的代碼冗余程度高(可維護(hù)性差)。處理代碼冗余問題最常規(guī)的思路就是將公共代碼提取出來(lái),大家一起使用。

img

那么我們現(xiàn)在將公共模塊抽取出來(lái)。

將事務(wù)管理的公共部分抽取出來(lái)成為一個(gè)類。

該類中具備4個(gè)方法:

代碼拆分之后如何合在一起是一個(gè)問題,我們可以使用代理模式來(lái)完成這個(gè)過程。

代理模式:

代理模式中有兩個(gè)角色:代理對(duì)象和目標(biāo)對(duì)象(原對(duì)象)

代理對(duì)象通過持有目標(biāo)對(duì)象,對(duì)目標(biāo)對(duì)象的方法進(jìn)行增強(qiáng)處理。

動(dòng)態(tài)代理:由JAVA或者第三方的程序,代替我們來(lái)完成代理對(duì)象的創(chuàng)建過程。

動(dòng)態(tài)代理有兩種JDK動(dòng)態(tài)代理和CGLIB的動(dòng)態(tài)代理

以JDK動(dòng)態(tài)代理為例:

1.我們需要將代理中需要執(zhí)行的代碼(事務(wù)管理的這一部分代碼)封裝起來(lái)。



2.調(diào)用動(dòng)態(tài)代理的API創(chuàng)建動(dòng)態(tài)代理對(duì)象



3.通過創(chuàng)建出來(lái)的代理對(duì)象執(zhí)行方法



在調(diào)用動(dòng)態(tài)代理的方法時(shí),根據(jù)源碼分析可以得知執(zhí)行的是傳入的InvocationHandler中的invoke方法。執(zhí)行Invoke方法時(shí)傳入了正在執(zhí)行的這個(gè)transfer方法對(duì)象,同時(shí)還有執(zhí)行該方法的參數(shù)。在InvocationHandler的invoke方法中封裝事務(wù)管理的代碼,然后通過反射執(zhí)行目標(biāo)對(duì)象的transfer方法。

img

代理模式總結(jié):

動(dòng)態(tài)代理共兩種:JDK?? ?CGLIB

JDK只能代理實(shí)現(xiàn)了接口的類,CGLIB都可以

JDK代理對(duì)象是目標(biāo)對(duì)象的兄弟,他們實(shí)現(xiàn)了同一個(gè)接口。CGLIB代理對(duì)象是目標(biāo)對(duì)象的子類。

我們?cè)谏厦娴陌咐惺褂脛?dòng)態(tài)代理完成了統(tǒng)一的事務(wù)管理。那這種解決問題的方式就是面向切面的雛形。

面向切面編程編程的重要概念:

面向切面:將代碼以橫向的形式切入到某些方法中。

advice:通知,封裝公共部分代碼的類。根據(jù)切入位置的不同通知一共可分為5種。

前置增強(qiáng)、后置增強(qiáng)、異常增強(qiáng)、最終增強(qiáng)、環(huán)繞增強(qiáng)

join point:連接點(diǎn),進(jìn)行代碼切入的某一個(gè)具體的方法。

point cut:切入點(diǎn),描述所有連接點(diǎn)集合的一種規(guī)則。

通知代表了要切入的內(nèi)容,切入點(diǎn)代表要切入的方法。

aspect:切面,切入點(diǎn)和通知構(gòu)成一個(gè)切面。

weave :織入(編織),在判定目標(biāo)對(duì)象處于切入點(diǎn)之上時(shí),通過代理對(duì)象的方式將通知和目標(biāo)對(duì)象編制在一起成為代理對(duì)象的過程。

SpringAOP就是建立在AOP思想之上的一套框架程序。我們可以通過配置或者注解將切入點(diǎn)信息和通知信息全部告知給Spring,Spring的IOC在創(chuàng)建對(duì)象時(shí)如果發(fā)現(xiàn)該對(duì)象處于切入點(diǎn)之上的,就會(huì)采用動(dòng)態(tài)代理的方式來(lái)創(chuàng)建這個(gè)對(duì)象并且將通知代碼織入進(jìn)去。

下一篇:回顧Spring整合mybatis


? ? ? ? ? ? ? ? ?


Java三十九篇:回顧Spring(2)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
西青区| 甘孜| 阳江市| 南澳县| 河津市| 泗阳县| 海阳市| 旌德县| 睢宁县| 四子王旗| 永登县| 志丹县| 富顺县| 淮滨县| 玉山县| 商都县| 景宁| 兴安县| 婺源县| 乐山市| 浏阳市| 晋城| 乐业县| 苍南县| 莫力| 广元市| 和龙市| 玛多县| 卫辉市| 治多县| 景宁| 鲜城| 修水县| 阿瓦提县| 青岛市| 英吉沙县| 尤溪县| 佛坪县| 康保县| 广昌县| 凤庆县|