1. 程式人生 > 其它 >老生常談系列之Aop--前言

老生常談系列之Aop--前言

老生常談系列之Aop--前言

前言

既然是前言,那麼這一篇就不會寫具體的技術問題。這篇文章主要記錄我一些個人的思考以及為什麼要寫文章的緣由。前不久在跟朋友的交流中偶然聊到了Aop,Aop全稱為 Aspect-oriented Programming ,翻譯過來即為面向切面程式設計。這對大家來說這是個很眼熟的東西,對我來說亦如此。似乎從我們開始接觸Java開始,這個概念一直就環繞在我們左右,照理說應該非常熟悉才對,但事實上就算專案有用到,也止於完成需求功能。即使是學習,也淺嘗輒止,瞭解到Spring裡的實現為動態代理還有其他一些切點切面的概念已經算是學得比較深了,但是始終沒有去深究這個東西的來龍去脈,也沒有了解過真正的原理,至少對我個人來說是這樣的,一切都朦朦朧朧,也可能是由於我功力不足,沒辦法學透。

於是萌生了寫一個簡單的Aop系列文章釋出在部落格上,算是自己的學習記錄和總結,如果能幫助到別人,那就更好了。冒出這個念頭的一瞬間我是十分欣喜的,就像要開始一趟新的征程。但是稍後我就冷靜下來,這一系列可不簡單,細節相當多。如果只是作為我的筆記,那麼就算錯漏百出也只是荼毒我一人,但是如果別人看了誤人子弟,那就不是我的初衷了。我怕我沒有辦法寫清楚,更怕我會寫錯。最為忌諱的就是以己昏昏使人昭昭,到時候寫成前言不搭後語恐怕要貽笑大方。也許我寫的可能根本不會有人看,但是對質量的要求是我自身的準則。不清不楚、不明不白是萬萬不可的。

稍加思索之後,我覺得我應該放棄。但是打開了Spring Aop部分的原始碼之後,我看到了我一年前加的註釋,頓時就覺得,我一定要寫,無論寫得是好是壞。因為一年前我就是懷揣著寫系列文章的想法去看原始碼的,但是在後來,我放棄了。同樣的理由,我怕我寫不好,我怕我寫不清楚,更怕會寫錯。

資料

所以我決定從頭開始梳理,從AspectJ開始,再到Spring Aop。我搜了一下網上的文章,發現互相借鑑的情況很多魚龍混雜,以至於會出現差不多的一篇文章內容,同時佔據了Google搜尋的前十。所以追根溯源,還是覺得看官方文件比較直接,於是我去看了AspectJ的官方文件,然後去看了Spring的官方文件Aop部分。同時閱讀了部分Spring相關書籍,例如《Spring原始碼深度解析》、《Spring實戰》、《Spring揭祕》以及《Spring5核心原理與30個類手寫實戰》等書籍的Aop部分。同時參考了許多大佬的部落格,有很多非常好的部落格,我覺得他們寫得已經很好了。下面推薦一下大佬們的文章:

【必讀】首先,推薦的是《Spring 原始碼深度解析》的 「第7章 AOP」 章節。
因為 Spring 靜態 AOP 實際場景下,使用較少,可以選擇性看看。感興趣的話,可以對 Java Instrumentation 機制做一定的瞭解。目前主流的鏈路追蹤系統的 Java Agent 都是基於它來實現的。

然後,也推薦看看五月的倉頡關於 AOP 的兩篇文章:

再然後,也非常推薦田小波關於 AOP 的四篇文章,非常細緻,特別是對 AOP 的概念解釋以及流程的拆分上:

再再然後,還會非常推薦 JavaDoop 關於 AOP 的一篇文章,看著大氣:

最後,推薦一些和 AOP 相關的有趣的文章:

目標

我覺得我的知識儲備在他們面前沒有任何的亮點,但是我還是打算自己寫,也算是自娛自樂,或者是對自己的一種交代,跟著大佬們的指導,也許會少走很多彎路。這是一個開篇,也是自己立下的flag,希望我能按照自己的想法去寫完這一系列的文章。下面說一下我的思路安排,首先我會介紹一下AspectJ的用法,純AspectJ如何實現切面,接下來簡單介紹一下AspectJ的原理,然後到Spring Aop是如何實現的,Spring Aop與AspectJ的關係,Spring Aop的原始碼解析,最後會列幾個專案中使用Aop遇到的一些問題。所以列出來打標題大概如下:

  • AspectJ簡介、原理和用法
  • Spring Aop簡介和用法
  • Spring Aop的原始碼解析(這一部分會分多篇)
  • 專案裡使用Aop的例子以及問題

有善始者實繁,能克終者蓋寡。 flag立完了,接下來要好好實現了。如果有人閱讀至此,與君共勉。路漫漫其修遠兮,吾將上下而求索。