javascript
Spring AOP概述及底层实现原理
Spring AOP概述及底層實(shí)現(xiàn)原理
aop概述
AOP全稱為Aspect Oriented Programming的縮寫,意為:面向切面編程。將程序中公用代碼進(jìn)行抽離,通過動(dòng)態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)。
使代碼耦合性降低,提高了開發(fā)的效率。
aop可以完成的功能
日志記錄,性能統(tǒng)計(jì),安全控制,事務(wù)處理,異常處理等等。
aop與oop區(qū)別
OOP:(面向?qū)ο缶幊?#xff09;針對(duì)業(yè)務(wù)處理過程的實(shí)體及其屬性和行為進(jìn)行抽象封裝,以獲得更加清晰高效的邏輯單元?jiǎng)澐帧ava實(shí)體類就是面向?qū)ο缶幊痰淖顪?zhǔn)確的體現(xiàn)。
AOP:則是針對(duì)業(yè)務(wù)處理過程中的切面進(jìn)行提取,它所面對(duì)的是處理過程中的某個(gè)步驟或階段,以獲得邏輯過程中各部分之間低耦合性的隔離效果。這兩種設(shè)計(jì)思想在目標(biāo)上有著本質(zhì)的差異。
aop相關(guān)術(shù)語
目標(biāo)對(duì)象target:指的是需要被增強(qiáng)的對(duì)象,由于spring aop是通過代理模式實(shí)現(xiàn),從而這個(gè)對(duì)象永遠(yuǎn)是被代理對(duì)象。
連接點(diǎn):所謂連接點(diǎn)是指那些被攔截到的點(diǎn),在spring中這些點(diǎn)指的是方法,因?yàn)閟pring只支持方法類型的連接點(diǎn)。
切入點(diǎn):表示一組 joint point,這些 joint point 或是通過邏輯關(guān)系組合起來,或是通過通配、正則表達(dá)式等方式集中起來,它定義了相應(yīng)的 Advice 將要發(fā)生的地方
簡單說切入點(diǎn)是指我們要對(duì)哪些連接點(diǎn)進(jìn)行攔截的定義。
通知:所謂通知是指攔截到連接點(diǎn)之后所要做的事情就是通知,通知分為前置通知,后置通知,異常通知,最終通知,環(huán)繞通知
切面aspect:是切入點(diǎn)和通知的結(jié)合
織入weaving:織入是一個(gè)過程,是將切面應(yīng)用到目標(biāo)對(duì)象從而創(chuàng)建出AOP代理對(duì)象的過程,織入可以在編譯期,類裝載期,運(yùn)行期進(jìn)行。(Spring采用動(dòng)態(tài)織入,而aspectj采用靜態(tài)織入)
代理proxy:一個(gè)類被AOP織入增強(qiáng)后,就產(chǎn)生一個(gè)結(jié)果代理類.
spring AOP底層實(shí)現(xiàn)介紹
spring的AOP底層是由 JDK提供的動(dòng)態(tài)代理技術(shù) 和 CGLIB(動(dòng)態(tài)字節(jié)碼增強(qiáng)技術(shù))實(shí)現(xiàn)。
**JDK動(dòng)態(tài)代理:**Jdk動(dòng)態(tài)代理只針對(duì)于接口操作。
CGLIB:可以針對(duì)沒有接口的java類和有接口的java類。
總結(jié)
以上是生活随笔為你收集整理的Spring AOP概述及底层实现原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: elasticsearch高亮显示查询结
- 下一篇: Spring Data ElasticS