AOP的功能完全集成到了SPRING事務(wù)管理,日志和其他各種特性的上下文中.
連接點(diǎn)(join points):在計(jì)算機(jī)科學(xué)中,“連接點(diǎn)”是連接程序中“控制流程(control flow)”的點(diǎn)。在面向方面的編程中,一系列的連接點(diǎn)集合被描述為“切入點(diǎn)”。連接點(diǎn)是主程序和“方面”的相會(huì)之處。在面向?qū)ο笳Z言中,連接點(diǎn)是程序執(zhí)行中定義良好的點(diǎn)。這些點(diǎn)包括方法和構(gòu)造函數(shù)的調(diào)用、字段訪問以等等內(nèi)容
切入點(diǎn)(pointcut):在面向方面計(jì)算機(jī)編程中,切入點(diǎn)是一系列連接點(diǎn)的集合。當(dāng)程序執(zhí)行到切入點(diǎn)所描述的其中一個(gè)連接點(diǎn)時(shí),與這個(gè)切入點(diǎn)相關(guān)的代碼片(被稱為通知)就會(huì)被執(zhí)行。這就使得一個(gè)程序員可以描述“何處”以及“何時(shí)”在已定義的行為之外去執(zhí)行附加的代碼。這樣就能向已經(jīng)存在的軟件增加新的方面(aspects),或者是軟件的設(shè)計(jì)帶有清晰的“關(guān)注分離(separation of concerns)”的特點(diǎn),從而使編程者將不同的方面融入到一個(gè)完整的應(yīng)用中。
通知(advice): 在面向方面計(jì)算機(jī)編程中,一片“通知”描述用于應(yīng)用于程序中給定連接點(diǎn)的一個(gè)函數(shù)(function)、方法(method)和過程(procedure) 。
連接點(diǎn)模型(Join point models)
面向方面語言中與通知相關(guān)的組件定義了一個(gè)連接點(diǎn)模型(join point model-JPM),JPM定義了三件事情:
何時(shí)(advice)通知可以運(yùn)行。之所以叫連接點(diǎn)(join points)是因?yàn)樗鼈兪钦谶\(yùn)行程序中那些附加行為可以被有效接入的點(diǎn)。為了使之可用,連接點(diǎn)需要被普通程序員所表達(dá)和理解。(為了使應(yīng)用的某個(gè)方面在跨越不連貫的變化時(shí)保持穩(wěn)定,連接點(diǎn)應(yīng)當(dāng)在跨越這些變化時(shí)穩(wěn)定
一種指定(或者量化)連接點(diǎn)的方法,稱之為“切入點(diǎn)”。切入點(diǎn)決定一個(gè)給定的連接點(diǎn)是否匹配。大多數(shù)有效的切入點(diǎn)語言使用類似基礎(chǔ)語言的語法(例如,AspectJ 使用java符號(hào)),并且允許通過命名和組合來實(shí)現(xiàn)(切入點(diǎn))重用(reuse)。
一種指定代碼在連接點(diǎn)處運(yùn)行的方法。在AspectJ中,被稱為通知(advice),并且能夠在連接點(diǎn)之前、之后或者包圍連接點(diǎn)運(yùn)行。
AOP編程的適用領(lǐng)域
Authentication 權(quán)限
Caching 緩存
Context passing 內(nèi)容傳遞
Error handling 錯(cuò)誤處理
Lazy loading 懶加載
Debugging 調(diào)試
logging, tracing, profiling and monitoring 記錄跟蹤 優(yōu)化 校準(zhǔn)
Performance optimization 性能優(yōu)化
Persistence 持久化
Resource pooling 資源池
Synchronization 同步
Transactions 事務(wù)