前言
本篇介紹什么是spring AOP, AOP的優(yōu)點,使用場景,spring AOP的組成,簡單實現(xiàn)AOP 并 了解它的通知;如有錯誤,請在評論區(qū)指正,讓我們一起交流,共同進步!
本文開始
1. 什么是spring AOP?
AOP: 面向切面編程,也就是面向某一類編程,對某一類事情進行統(tǒng)一處理;
spring AOP: 是實現(xiàn)了AOP這種思想的一個框架;
AOP優(yōu)點:
- 減少重復(fù)代碼:對一類同樣的工作統(tǒng)一處理;
- 提高開發(fā)效率:同上;
spring AOP 使用場景
使用:統(tǒng)一用戶登錄判斷; 統(tǒng)一異常處理; 統(tǒng)一日志等等;
認識AOP的組成
- 切面- Aspect:AOP定義的是一個事件;例如:登錄操作的整個過程;- 某個具體功能實現(xiàn)的過程 - 一共類;
- 切點 - Pointcut:AOP定義的具體規(guī)則;例如:驗證登錄的 方法;- 實現(xiàn)功能的方法 - 類中的方法定義;
- 連接點 - Join Point:可能觸發(fā)切點的所有點;- 可能調(diào)用功能的某個方法的點;
-
通知 - Advice:AOP具體執(zhí)行的方法;例如:方法的具體實現(xiàn);- 代碼具體實現(xiàn) - 類中方法的具體實現(xiàn);
① 前置通知 @Before
② 后置通知 @After
③ 環(huán)繞通知 @Around
④ 異常通知 @AfterThrowing
⑤ 返回通知 @AfterReturning
通知執(zhí)行的順序:環(huán)繞通知之前 > 前置通知 > 方法 > 方法返回后通知 > 后置通知 > 環(huán)繞通知之后
2. 實現(xiàn)spring AOP - 認識各種通知
2.1 在springboot項目中,原有依賴 + 添加spring AOP 依賴
2.2 實現(xiàn)過程 定義切面 + 定義切點 + 定義通知
- 定義切面 -> 定義類
@Aspect // 定義切面
@Component //隨框架啟動,注入到容器中
public class UserAspect {
//定義切點 + 通知...
}
- 定義切點 -> 定義方法
//定義切點, 對UserController進行攔截
@Pointcut("execution(* com.example.demo.controller.UserController.*(..))")
public void pointcut() {
}//空方法:方法名用于標識
切點表達式:識別該包下類下的任意方法,參數(shù)不限;
文章來源:http://www.zghlxwxcb.cn/news/detail-630936.html
- 定義通知:切點的方法名,寫在通知參數(shù)中,用于識別是哪個切點的通知;(想了解具體的 百度 - AspectJ 語法)
//前置通知
@Before("pointcut()")
public void doBefore() {
System.out.println("執(zhí)行前置通知!");
}
//后置通知
@After("pointcut()")
public void doAfter() {
System.out.println("執(zhí)行后置通知!");
}
//后置返回后的通知
@AfterReturning("pointcut()")
public void doAfterReturn() {
System.out.println("執(zhí)行返回后通知!");
}//拋出異常后通知
@AfterThrowing("pointcut()")
public void doAfterThrow() {
System.out.println("執(zhí)行拋異常后的通知!");
}
//環(huán)繞通知
//使用環(huán)繞通知:例如:統(tǒng)計時間,就可以使用環(huán)繞通知,將通知前 與 通知后 放在一起
@Around("pointcut()") //ProceedingJoinPoint:獲取連接點;執(zhí)行 =》返回框架,執(zhí)行
public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("執(zhí)行環(huán)繞通知之前!");
Object result = joinPoint.proceed();
System.out.println("執(zhí)行環(huán)繞通知之后");
return result;
}
總結(jié)
???各位讀友,本篇分享到內(nèi)容如果對你有幫助給個??贊鼓勵一下吧??!
感謝每一位一起走到這的伙伴,我們可以一起交流進步?。?!一起加油吧!??!文章來源地址http://www.zghlxwxcb.cn/news/detail-630936.html
到了這里,關(guān)于認識 spring AOP (面向切面編程) - springboot的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!