aop實戰之旅(不基於註解)
ioc(控制反轉)
ioc:通俗點來講,就是把物件的建立交給spring容器來管理,不用我們手動new
aop:定義乙個切面,在切面中執行特定**,實現**增強,常用於日誌列印,異常處理,效能耗時計算,事務處理,安全驗證等等,
每個方法都要寫記錄日誌的**,**多,工作量大
日誌統一交給某個類(切面配置類)來記錄,這樣做的好處是業務**簡潔了,也能達到一定的解耦等等
>
>
org.springframework.bootgroupid
>
>
spring-boot-starter-aopartifactid
>
dependency
>
@aspect
//標識為乙個切面類
@component
//交給spring管理
public
class
systemlogaspect
@before
("controlleraspect()"
)public
void
dobefore
(joinpoint joinpoint)
@afterreturning
("controlleraspect()"
)public
void
after
(joinpoint joinpoint)
@afterthrowing
("controlleraspect()"
)public
void
afterthrow
(joinpoint joinpoint)
}
/**
* @description:切面註解
* @author: mosey
* @time: 2021/3/6 14:50
*/@target
(elementtype.method)
//作用於引數或方法上
@retention
(retentionpolicy.runtime)
@documented
public @inte***ce
systemloginte***ce
(value =
"/test"
)@slf4j
@restcontroller
public
class
testcontroller
}
方法執行前通知ps:如果方法執行時發生異常,會進入到@afterthrowing中,如果我們有在test()方法中捕獲異常,則不會進入@afterthrowing。方法正在執行中。。。
方法返回結果後執行
方法執行前通知更多有關於execution表示式的,可以看下面的截圖,execution也可以用連線符&& || 和!等匹配多個表示式,具體問題具體分析方法正在執行中。。。
方法返回結果後執行
運維其實不難
運維不難?恐怕有人要扔鞋子了 1 系統不是我們開發的,維護中很多東西搞不定要找開發 實施的 2 找他們,要麼忙,要麼說幾句,搞得似懂非懂.3 開發中的遺留問題導致重大事件,運維成了替罪羊.4 客戶口頭說了兩句,日後有事就怪執行規範 5 客戶要提數 臨時安排任務 開發實施要做緊急配合,忙得不可開交.運...
KMP 其實也不難
引入 尋找子串在源串中的起始位置。傳統c 如下 include includeusing namespace std kmp 常規操作 int find substr location string str,string pattern else if flag true else return 1...
spring 註解實現aop
aspect表明這是乙個切面類 package com.kuang.diy author administrator description todo date 2021 11 26 13 46 import org.aspectj.lang.proceedingjoinpoint import o...