AOP:面向切面編程,通過(guò)預(yù)編譯方式和運(yùn)行期動(dòng)態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)。AOP是OOP(面向?qū)ο缶幊蹋┑难永m(xù)
AOP采取橫向抽取機(jī)制,取代了傳統(tǒng)縱向繼承體系重復(fù)性代碼
經(jīng)典應(yīng)用:事務(wù)管理、性能監(jiān)視、安全檢查、緩存 、日志等
AOP實(shí)現(xiàn)原理
- aop底層將采用代理機(jī)制進(jìn)行實(shí)現(xiàn)。
- 接口 + 實(shí)現(xiàn)類 :spring采用 jdk 的動(dòng)態(tài)代理Proxy。
- 實(shí)現(xiàn)類:spring 采用 cglib字節(jié)碼增強(qiáng)。
核心知識(shí)點(diǎn)
1.target:目標(biāo)類,需要被代理的類。
2.Joinpoint(連接點(diǎn)):所謂連接點(diǎn)是指那些可能被攔截到的方法。
3.PointCut 切入點(diǎn):已經(jīng)被增強(qiáng)的連接點(diǎn)。
4.advice 通知/增強(qiáng),增強(qiáng)代碼。
5.Weaving(織入):是指把增強(qiáng)advice應(yīng)用到目標(biāo)對(duì)象target來(lái)創(chuàng)建新的代理對(duì)象proxy的過(guò)程.
6.proxy 代理類
- Aspect(切面): 是切入點(diǎn)pointcut和通知advice的結(jié)合
一個(gè)線是一個(gè)特殊的面。
一個(gè)切入點(diǎn)和一個(gè)通知,組成成一個(gè)特殊的面。
通過(guò)Joinpoint.getSignature();獲取攔截到的方法簽名MethodSignature
MethodSignature.getMethod() 找到對(duì)應(yīng)執(zhí)行方法
如需使用注解@aspect 必須在xml中進(jìn)行配置
<aop:aspectj-autoproxy />