初看aop,上來就是一大堆術語,並且還有個拉風的名字,面向切面編程,都說是oop的一種有益補充等等,一會兒讓你不知所措,心想着:怪不得不少人都和我說aop多難多難。當我看進去之後,我才發現:它就是一些java基礎上的樸實無華的應用,包括IOC,包括許許多多這樣的名詞,都是萬變不離其中而已。java
爲何用aop?spring
一、 就是爲了方便,看一個國外頗有名的大師說,編程的人都是「懶人」,由於他把本身作的事情都讓程序作了。用了aop能讓你少些不少代碼,這點就夠充分了吧。編程
二、 就是爲了更清晰的邏輯,可讓你的業務邏輯去關注本身自己的業務,而不去想一些其餘的事情,這些其餘的事情包括:安全,事物,日誌等。安全
初看這麼多術語,一會兒都很差接受,慢慢來,很快就會搞懂。oop
一、 通知(Advice):就是你想要的功能,也就是上面說的安全事物日誌等。你給先定義好吧,而後在想用的地方用一下! spa
二、 鏈接點(JoinPoint):這個更好解釋了,就是spring容許你使用通知的地方,那可真就多了,基本每一個方法的前,後(二者都有也行),或拋出異常時均可以是鏈接點,spring只支持方法鏈接點,其餘如aspectj還可讓你在構造器或者屬性注入時都行,不過那不是咱關注的,只要記住,和方法有關的前前虎吼(拋出異常),搜是鏈接點。代理
三、 切入點(Pointcut):上面說的鏈接點的基礎上。來定義切入點,你的一個類裏,有15個方法,那就是幾十個鏈接點對吧!可是你並不想在多有方法赴京都使用通知(使用叫植入,之後再說),你只是想讓其中的幾個,在調用這幾個方法以前、以後或者拋出異常時乾點什麼,那麼就用切點來定義表這幾個方法,讓切點來篩選鏈接點,選中那幾你想要的方法。日誌
四、切面(Aspect):切面是通知和切入點的結合,如今發現了吧?沒有鏈接點什麼事情,鏈接點就是爲了讓你更好的理解切點,搞出來的。明白這個概念就好了。通知說明了幹什麼和何時幹(何時是經過方法明中的before、after、around等能知道),而切入點說明了在哪幹(指定到底那個方法)這就是一個完整的切面的定義。對象
五、引入(Introduction):容許咱們向現有的類添加新方法屬性,這不就是把切面(也就是把新方法屬性:通知定義的)用到目標類中嗎?get
六、目標(Target):引入中所提到的目標類,也就是要被通知的對象,也就是真正的業務邏輯,他能夠在絕不知情的狀況下,被我們植入切面。而本身專一於業務自己的邏輯。
七、代理(Proxy):怎麼實現整套的aop機制的,都是經過動態代理。
八、織入(Weaving):把切面應用到目標對象來建立新的代理對象的過程。