當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
AOP和Spring AOP介绍
生活随笔
收集整理的這篇文章主要介紹了
AOP和Spring AOP介绍
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
AOP和Spring AOP介紹
文章目錄
- AOP和Spring AOP介紹
- 一.AOP簡介
- 二. 傳統(tǒng)開發(fā)存在的弊端
- 三. AOP實(shí)現(xiàn)原理
- 四.Spring AOP
- 五.AOP相關(guān)術(shù)語
一.AOP簡介
- AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程。是OOP的延續(xù),是軟件開發(fā)中的一個熱點(diǎn),也是Spring框架中的一個重要內(nèi)容,函數(shù)式編程的一種衍生范型;
- AOP 通過預(yù)編譯方式和運(yùn)行期動態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù);
- 利用AOP可以對業(yè)務(wù)邏輯的各個部分進(jìn)行隔離,從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發(fā)的效率。
二. 傳統(tǒng)開發(fā)存在的弊端
假設(shè)你正在開發(fā)的項(xiàng)目中需要在保存之前添加一個功能(例如權(quán)限校驗(yàn)),此時需要手動在項(xiàng)目中所有保存功能之前添加權(quán)限校驗(yàn),我們可以通過抽取一個基類,里面寫了權(quán)限校驗(yàn)功能,讓所有類繼承此類,這是傳統(tǒng)面向?qū)ο罄^承的方式開發(fā),需要改動大量代碼;
我們的目標(biāo): 不破壞原來的類,生成一個代理類,在原來類的基礎(chǔ)上進(jìn)行增強(qiáng),可以實(shí)現(xiàn)隨時添加,隨時取消添加的功能
解決: AOP通過代理類采用橫向抽取機(jī)制取代了傳統(tǒng)縱向繼承
三. AOP實(shí)現(xiàn)原理
JDK動態(tài)代理的實(shí)現(xiàn)是在運(yùn)行時,根據(jù)一組接口定義,使用Proxy、InvocationHandler等工具類去生成一個代理類和代理類實(shí)例。
cglib是一個第三方開源代碼生成類庫(使用時一定要在spring的核心包當(dāng)中引入cglib),cglib動態(tài)添加類的屬性和方法,采用的是繼承方式來產(chǎn)生的代理對象
四.Spring AOP
- Spring使用這種思想最好的框架
- Spring的AOP有自己的實(shí)現(xiàn)方式,但是這種方式非常繁瑣,因此Spring放棄了自己傳統(tǒng)的方式 ,引入AspectJ作為自身AOP的開發(fā)
- AspectJ 是一個AOP的框架
五.AOP相關(guān)術(shù)語
Joinpoint:連接點(diǎn)
(1)可以被攔截到的方法
(2) 能夠被增強(qiáng)的方法,這些方法就可以稱為是連接點(diǎn)
其中save() ,delete() ,update() ,find()都是 Joinpoint連接點(diǎn)
Pointcut:切入點(diǎn)
真正被攔截(增強(qiáng))的方法
其中的save()方法就是 Pointcut切入點(diǎn)
增加的內(nèi)容,通常都是封裝成一個方法, 這個方法我們就稱為通知
其中的checkPrivilege()方法就是Advice通知
(1)類層面的增加
(2)給原有的類添加一些新的屬性方法
(3)在開發(fā)中通常都是給某個方法進(jìn)行增加
其中GoodsDao就是Target被增加的對象
將通知應(yīng)用到目標(biāo)對象的過程
多個通知和多個切入點(diǎn)的集合
總結(jié)
以上是生活随笔為你收集整理的AOP和Spring AOP介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Zookeeper默认占用8080端口问
- 下一篇: JavaScript每日学习日记(1)