一個簡單的例子,學習自定義註解和AOP
前言
面試的時候,被問的最多的可能就是你知道Spring的兩大核心嘛?那你說說什麼是AOP,什麼是IOC/">IOC?我相信你可能也被問了很多次了。
1、到底是什麼是AOP?
所謂AOP也就是面向切面程式設計,能夠讓我們在不影響原有業務功能的前提下, 橫切 擴充套件新的功能。這裡面有一個比較顯眼的詞我們需要注意一下,橫切,它是基於橫切面對程式進行擴充套件的。
2、AOP相關術語
在Spring的AOP中有很多的術語,而且容易混淆,大家一定要先搞清楚這幾個概念:
連線點(Joinpoint) :在程式執行過程中某個特定的點,比如類初始化前、類初始化後,方法呼叫前,方法呼叫後;
切點(Pointcut) :所謂切點就是你所切取的類中的方法,比如你橫切的這個類中有兩個方法,那麼這兩個方法都是連線點,對這兩個方法的定位就稱之為切點;
增強(Advice) :增強是織入到連線點上的一段程式,另外它還擁有連線點的相關資訊;
目標物件(Target) :增強邏輯的織入目標類,就是我的增強邏輯植入到什麼位置;
引介(Introduction) :一種特殊的增強,它可以為類新增一些屬性喝方法;
織入(Weaving) :織入就是講增強邏輯新增到目標物件的過程;
代理(Proxy) :一個類被AOP織入增強後,就會產生一個結果類,他是融合了原類和增強邏輯的代理類;
切面(Aspect) :切面由切點和增強組成,他是橫切邏輯定義和連線點定義的組成;
3、AOP功能實踐
我們這裡主要是學習SpringBoot中的一些功能,所以我們這裡用的是SpringBoot工程,版本也是最新的2.0.5版本。
建立SpringBoot工程就不說了,我們直接引入Maven的依賴:
首先我們來建立一個Controller類:
建立切面:
註解概述:
@Apsect :將當前類標識為一個切面;
@Pointcut :定義切點,這裡使用的是條件表示式;
@Before :前置增強,就是在目標方法執行之前執行;
@AfterReturning :後置增強,方法退出時執行;
@AfterThrowing :有異常時該方法執行;
@After :最終增強,無論什麼情況都會執行;
@Afround :環繞增強;
測試:
異常測試:
4、定義自定義註解
應用場景 :在我之前上個專案的時候,有這樣一個註解,就是在訪問其他介面的時候必須要登入,那麼這個時候我們就定義一個註解,讓它去對使用者是否登入進行校驗,那麼基於這樣的一個場景,我們來定義一個校驗登入的註解。
建立一個註解:
建立一個AOP切面:
測試未登入:
測試登入:
這樣我們就可以簡單的實現了一個登入校驗的註解。
通過今天的分享你會使用AOP和自定義註解了嗎?
歡迎工作一到五年的Java工程師朋友們加入Java填坑之路:860113481
群內提供免費的Java架構學習資料(裡面有高可用、高併發、高效能及分散式、Jvm效能調優、Spring原始碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!