好的各位小伙伴
雖然今天是周六
我們還是不能松懈
好的開(kāi)始今天的分享
來(lái)一起看一下吧!
AOP 是什么
AOP 是 Aspect-oriented programming 面向切面(方面)的編程的簡(jiǎn)寫(xiě)烈疚,可以把業(yè)務(wù)邏輯和系統(tǒng)級(jí)的服務(wù)進(jìn)行隔離,使業(yè)務(wù)邏輯跟各個(gè)系統(tǒng)級(jí)服務(wù)的耦合度降低,提高程序的重用性和開(kāi)發(fā)效率
業(yè)務(wù)邏輯就是某個(gè)類的某個(gè)方法本身要實(shí)現(xiàn)的功能揉阎。比如我們之前寫(xiě)的 studentservice 里面實(shí)現(xiàn)的增刪改查就是業(yè)務(wù)邏輯杏节!
系統(tǒng)級(jí)的服務(wù)像系統(tǒng)的日志,事務(wù),權(quán)限驗(yàn)證等
系統(tǒng)日志會(huì)記錄什么人在哪一天什么時(shí)間做了哪些操作谤民。
權(quán)限驗(yàn)證就是驗(yàn)證我們的權(quán)限慎框,還記得我們之前的聊天室的踢人功能嗎辆影?只有 admin才可以踢人
事務(wù)這個(gè)概念徒像,今天暫時(shí)先放一下,在之后做例子的時(shí)候會(huì)演示給大家的蛙讥!
那么現(xiàn)在把這些系統(tǒng)級(jí)服務(wù)的插入進(jìn)我們的功能代碼中锯蛀,用一行輸出語(yǔ)句代表我們的業(yè)務(wù)邏輯,在執(zhí)行一個(gè)操作之前次慢,要先進(jìn)行權(quán)限驗(yàn)證旁涤,驗(yàn)證通過(guò)之后翔曲,再來(lái)執(zhí)行我們的操作,操作完成后劈愚,記錄日志瞳遍。
小伙伴們自己想一下為什么是這個(gè)順序?
?
這是在沒(méi)有 AOP 之前菌羽,我們每個(gè)功能都要這么去添加系統(tǒng)級(jí)服務(wù)掠械,要是這個(gè)項(xiàng)目有一千個(gè)類,你就去加吧注祖,至少一周不用干別的了猾蒂,就是復(fù)制代碼!
現(xiàn)在我們有了 AOP 就可以不用這么麻煩了
AOP 的底層原理 ?
AOP 的底層實(shí)現(xiàn)的原理:動(dòng)態(tài)代理
首先是實(shí)例化我們要代理的目標(biāo)類 target是晨, 然后在生成一個(gè)動(dòng)態(tài)代理 proxy 肚菠,這個(gè)方法里面有三個(gè)參數(shù),我們的目標(biāo)類署鸡,目標(biāo)類的接口案糙,實(shí)現(xiàn) invocation 接口限嫌。實(shí)現(xiàn)接口的同時(shí)需要實(shí)現(xiàn)里面的方法靴庆!這個(gè)方法里,有我們的代理對(duì)象怒医,方法和參數(shù)炉抒!
我已經(jīng)把驗(yàn)證和日志都注釋掉了
只要我們的測(cè)試結(jié)果中有我們標(biāo)注的這兩行,證明我們成功的插入了系統(tǒng)級(jí)服務(wù)稚叹!
測(cè)試結(jié)果:
看著很麻煩是不是焰薄,當(dāng)然我們?cè)趯?shí)際的開(kāi)發(fā)中不會(huì)去手動(dòng)的生成代理,這里只是給大家演示 AOP 的底層原理扒袖,要是這么麻煩我們還不如直接在代碼里面插入服務(wù)了塞茅。
注意動(dòng)態(tài)代理有兩種方式:jdk動(dòng)態(tài)代理 /cglib動(dòng)態(tài)代理
jdk 的動(dòng)態(tài)代理機(jī)制只能代理實(shí)現(xiàn)了接口的類
cglib 的動(dòng)態(tài)代理既可以代理實(shí)現(xiàn)了接口的類,也可以代理沒(méi)有實(shí)現(xiàn)接口的類
AOP一些專業(yè)術(shù)語(yǔ)
切面(Aspect): 就是交叉在各個(gè)業(yè)務(wù)邏輯中的系統(tǒng)服務(wù),類似于安全驗(yàn)證,事務(wù)處理,日志記錄都可以理解為切面。
織入(weaving) :就是將切面代碼插入到目標(biāo)對(duì)象某個(gè)方法的過(guò)程,相當(dāng)于我們?cè)趈dk動(dòng)態(tài)代理里面的 invocationHandler接口方法的內(nèi)容 季率。
連接點(diǎn)(JointPoint) :理論上可能被切面織入的所有方法 ,比如 addStudent...通常所有方法都可以被稱為連接點(diǎn)野瘦。
切入點(diǎn)(PointCut) :就是實(shí)際上被切面織入的方法。
目標(biāo)對(duì)象(target) :就是切入點(diǎn)和連接點(diǎn)所屬的類 StudentService飒泻。
通知(Advice): 就是切面的實(shí)現(xiàn),切面織入的目標(biāo)對(duì)象,時(shí)間點(diǎn)(方法執(zhí)行前 ,后,前后,異常)以及內(nèi)容鞭光。
顧問(wèn)(Advisor) :其實(shí)就是通知的一個(gè)封裝和延伸,可以將通知以更為復(fù)雜的方式織入到某些方法中。
好的各位小伙伴
今天就先到這里了
我會(huì)繼續(xù)努力的
再見(jiàn)了各位