最近疫情還是肆虐,新的一年裡如果快樂太難,那我祝大家平安,要保重身體哦。
說白了aop就是把程式中公共的**片段抽取出來,然後動態**出來乙個物件。就像乙個函式一樣,裡面封裝了我們的公共**,我們把要呼叫的函式傳進去,它把我們傳進去函式進行增強,然後返回乙個呼叫該函式的物件。
舉個例子,我們運算元據庫的語句經常就要考慮到事務的控制,不然就沒辦法保證事務的一致性,後果就會不堪設想!!!
這個時候每個運算元據庫的方法都要加入事務控制的**塊,就會有重複的情況,我們的開發就會很冗餘。退一萬步來講,就算你能忍,遍好之後並且你可以執行,bingo。但萬一以後你改了乙個事務方法的名字,那麼全部**塊就要跟著改動,那麼會非常麻煩,這種**耦合性特別高。它們方法之間的依賴特別強。我們就要想著如何降低耦合性。
在我之前的部落格中說到程式間的耦合大致分為兩種,一種是類與類之間的依賴,另外就是方法與方法之間的依賴了。我們降低程式的耦合的話要從這兩方面入手,spring為我們提供兩個技術,前者用ioc可以解決,後者就要用到我們今天介紹的aop了。把公共**抽取出來,然後動態**出乙個**物件並返回。這樣有個好處,以後如果改了相關方法名,只用改動抽取出來的**塊,而不用大範圍改未優化的**。
而且動態**的話,還可以在不修改原始碼的基礎上增強**,如圖:
我們把對事務的操作都封裝並抽取出來,這樣就可以做到每個對資料庫操作的方法都支援事務操作,開發效率也會得到提公升。這種方式就是aop。
連線點連線點就是被**類中的所有方法。
切入點切入點是被增強過的方法,注意這裡它和連線點的區別,有些方法可能並沒有被增強,而是直接返回,這些方法只是連線點,並不是切入點。切入點一定是連線點,連線點不一定切入點。
增強/通知
增強也叫通知,從字面上看就是增強的操作。增強分為:前置增強、後置增強、異常增強、最終增強與環繞增強。分類很多,咋一看很有規律。一**圖為例,我們要增強的方法為:
rtvalue = method.invoke(accountservice,args);
在try**塊中,在這個方法之前所做的操作為前置增強,在這個方法之後所做的為後置增強。在catch**塊中所做操作為異常增強,畢竟是捕獲異常呀。在finally中所做的操作為最終增強。而整個合起來稱為環繞增強。
目標物件
被**的物件
引介引介是一種特殊的增強,它為類新增一些屬性和方法。這樣,即使乙個業務類原本沒有實現某個介面,通過aop的引介功能,我們可以動態地為該業務類新增介面的實現邏輯,讓業務類成為這個介面的實現類。
織入織入是將增強新增對目標類具體連線點上的過程
****出來的物件
切面這個感覺特別抽象,就是在xml中描述切入點和其他增強的關係,為什麼叫切面呢,一下是我自己個人的猜測:假設有乙隻豬,一刀下去,我們可以看到橫切面,並且可以看到錯中複雜的血管和器官的連線,當然這些是玩笑話。
如果各位看到不對的地方,請大家多多幫我指正下啦,蟹蟹哈。
大白話講解ThreadLocal的原理
threadlocal顧名思義,本地執行緒,可以理解為本地執行緒變數,說白了就是操作本地執行緒的區域性變數。下面我們通過原始碼進行說明 首先,我們看一下threadlocal的set方法原始碼實現 public void set t value 通過原始碼我們可以發現,首先獲取了當前執行緒,然後呼叫...
大白話講解Spring的 bean註解
從廣義上spring註解可以分為兩類 一類註解是用於註冊bean 假如ioc容器就是一間空屋子,首先這間空屋子啥都沒有,我們要吃大餐,我們就要從外部搬運食材和餐具進來。這裡把某一樣食材或者某一樣餐具搬進空屋子的操作就相當於每個註冊bean的註解作用類似。註冊bean的註解作用就是往ioc容器中放 註...
大白話講解C 中的委託
有一天,你寫了好多好多帶 形參 的建構函式 就是 方法 同義 而且需要向這些建構函式裡傳遞同樣的 實參 然後你就憨憨地乙個乙個函式的呼叫並賦予同樣的 實參 這一天就這麼過去了.又過了幾天,你又要再一次呼叫這麼多函式了,你再老老實實地乙個乙個函式進行呼叫?聰明的你,肯定會想 真tm麻煩!有沒有一勞永逸...