aop(aspect-oriented programming)即面向切面的程式設計,aop 和 oop(object-oriented programming)物件導向程式設計一樣都是一種程式設計思想,aop 只是 oop 的補充和延伸,可以更方便的對業務**進行解耦,從而提高**質量和增加**的可重用性。後面的篇章會結合實際案例,教會大家理解並學會使用 aop。
優點就是,在不改變原有方法**的情況下實現你想要實現的額外功能.我們那swof**中的首頁**來示範
*/
public function index(): response
當我們想對上邊的**加乙個執行時間是,按照之前的寫法,我們可能會寫成這樣:
/**
* @throws throwable
*/public function index(): response
執行結果是這樣的:(在控制台中檢視結果)
string(16) "執行時間為:"
float(2.058)
這樣有個缺點就是,只是計算了當前$bengin_time
與$end_time
之間**的運算時間,並且我們修改了原方法,那麼我們如何才能不通過修改源**的方式,也能得到運算時間呢?
我們首先先頂乙個切面類,類似於這樣:
<?php declare(strict_types=1);
use swoft\aop\point\joinpoint;
/** * @aspect(order=1) # 優先順序, 數字越小則優先執行。
* * @pointbean(include=) # 這裡指的是定義切入目標。注意需要use引入一下這個類
*/class yingxiaozhuaspect
/*** 後置通知
** @after()
** @param joinpoint $joinpoint
*/public function afteradvice(joinpoint $joinpoint)
方法,本次執行時間為: ms \n";
}}
重啟服務,訪問首頁檢視一下結果:
index 方法,本次執行時間為: 4.072ms
AOP切面的實現
aop的全稱是aspect orient programming,即面向切面程式設計。是對oop object orient programming 的一種補充,戰門用於處理一些具有橫切性質的服務。常常用於日誌輸出 安全控制等。最近遇到增加操作日誌記錄功能問題,網上推薦使用切面技術實現,可以在不修改...
springboot之aop切面獲取請求
在學習springboot的部落格開發中,通過aop切面,對部落格中的操作進行記錄 問題 在切面方法中,無法獲取請求的引數和類名,方法,ip等 before log 呼叫log方法 public void dobefore joinpoint joinpoint requestcontexthold...
Spring學習之深入AOP面向切面程式設計
1 aop基本概念術語。切面 通知 切入點 引入 織入。切面,是指需要實現的交叉功能。是應用系統模組化的乙個俄切面或領域。切面最常見的例子是日誌記錄。乙個系統到處都需要日誌記錄,利用切面就能不侵入的情況下實現該功能。其實切面就是包含定義切面行為的通知和定義切面在什麼地方織入的切入點組成。通知,就是切...