后臺(tái)小技巧

機(jī)緣巧合屁柏,看到一個(gè)后臺(tái)管理工程,因其用Spring Boot + Shiro搭的腳手架有送,所以就想看看學(xué)習(xí)學(xué)習(xí)淌喻。在這中間,學(xué)到了個(gè)小技巧雀摘。運(yùn)用AOP實(shí)現(xiàn)對(duì)用戶操作日志異步存儲(chǔ)裸删。

AOP(面向切面編程),其彌補(bǔ)了OOP在橫向上的局限阵赠,最為典型的就是日志管理涯塔。這也可謂是老生常談(可以看看aop-introduction),但是我對(duì)它的認(rèn)識(shí)并不深刻清蚀,今天通過這個(gè)工程剖析一下匕荸。

實(shí)現(xiàn)目標(biāo):用戶在操作系統(tǒng)的每一步都記錄下來,操作過程中枷邪,后臺(tái)對(duì)應(yīng)哪個(gè)類哪個(gè)方法等詳細(xì)信息都將存入MySQL定義的日志表中榛搔,方便管理。

1.MySQL數(shù)據(jù)庫(kù)中齿风,已經(jīng)有一張操作日志表药薯,通過show create table operation_log;看看表結(jié)構(gòu)情況。

表結(jié)構(gòu)

2.系統(tǒng)中定義個(gè)POJO對(duì)象救斑,與數(shù)據(jù)庫(kù)內(nèi)的表結(jié)構(gòu)相對(duì)應(yīng)童本。這其中作者選擇Mybatis-Plus做為ORM框架。

POJO

3.聲明一個(gè)注解脸候,這樣只要是使用該注解的地方就是AOP的切點(diǎn)

BussinessLog注解

4.定義一個(gè)類穷娱,實(shí)現(xiàn)當(dāng)引用該BussinessLog注解時(shí),自動(dòng)完成操作日志入庫(kù)运沦。

這里就涉及到AOP的核心內(nèi)容了泵额,讓我們先來看看Spring AOP由哪些元素組成。

Spring AOP構(gòu)成

A pointcut declaration has two parts: a signature comprising a name and any parameters, and a pointcut expression that determines?exactly?which method executions we are interested in.

例如:

定義PointCut

@Pointcut(value="@annotation(com.stylefeng.guns.common.annotion.log.BussinessLog)")//就是a pointcut expression the pointcut expression携添。

其匹配模式可以有如下幾種:

pointcut expression類型

上訴示例即對(duì)有應(yīng)用com.stylefeng.guns.common.annotion.log.BussinessLog進(jìn)行注解的方法進(jìn)行橫切面攔截嫁盲。

public void cutService() {}? //the pointcut signature

@Around("cutService()")

advice中處理這個(gè)Pointcut(記錄操作日志),這里的的advice使用的是Around

在Spring AOP中支持如下幾種類型advice

Advice類型

作者在該處運(yùn)用Around advice,并通過point.proceed()烈掠,先執(zhí)行切點(diǎn)所在位置的業(yè)務(wù)邏輯羞秤,然后通過handle(point)處理切點(diǎn)的業(yè)務(wù)邏輯(即將用戶操作日志寫入數(shù)據(jù)庫(kù))缸托。其實(shí),我個(gè)人覺得After returning advice更適合瘾蛋,這樣就無須point.proceed俐镐。

ProceedingJoinPoint?point該對(duì)象封裝了連接點(diǎn)的信息,其繼承自JoinPoint哺哼,該接口能夠獲得切點(diǎn)處的狀態(tài)佩抹。

JoinPoint Method

讓我們?cè)倏纯磆andle:

獲取切點(diǎn)處方法名
獲取切點(diǎn)處類名及注記中操作名稱
將操作日志入庫(kù)

LogManager中則是通過ScheduledThreadPoolExecutor線程池,定期執(zhí)行TimerTask任務(wù)取董。

LogManager定義

TimerTask則是通過LogTaskFactory工廠類來創(chuàng)建的棍苹,其中operationLogMapper.insert(operationLog)即向數(shù)據(jù)庫(kù)中插入操作日志記錄,Mybatis-Plus已經(jīng)為你實(shí)現(xiàn)甲葬,你只需要將interface OperationLogMapper extends BaseMapper<OperationLog>?

TImerTask 生成

總結(jié)廊勃,通過定義切點(diǎn),切點(diǎn)處的業(yè)務(wù)處理邏輯经窖,實(shí)現(xiàn)在每個(gè)操作數(shù)據(jù)庫(kù)的動(dòng)作記錄均被切點(diǎn)撲捉到,并通過切點(diǎn)處的業(yè)務(wù)邏輯實(shí)現(xiàn)對(duì)動(dòng)作的入庫(kù)梭灿,這就是AOP的魅力画侣。詳細(xì)了解AOP請(qǐng)閱讀aop-introduction

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市堡妒,隨后出現(xiàn)的幾起案子配乱,更是在濱河造成了極大的恐慌,老刑警劉巖皮迟,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搬泥,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡伏尼,警方通過查閱死者的電腦和手機(jī)忿檩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爆阶,“玉大人燥透,你說我怎么就攤上這事”嫱迹” “怎么了班套?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)故河。 經(jīng)常有香客問我吱韭,道長(zhǎng),這世上最難降的妖魔是什么鱼的? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任理盆,我火速辦了婚禮痘煤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘熏挎。我一直安慰自己速勇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布坎拐。 她就那樣靜靜地躺著烦磁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哼勇。 梳的紋絲不亂的頭發(fā)上都伪,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音积担,去河邊找鬼陨晶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛帝璧,可吹牛的內(nèi)容都是我干的先誉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼的烁,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼褐耳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起渴庆,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤铃芦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后襟雷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刃滓,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年耸弄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了咧虎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡叙赚,死狀恐怖老客,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情震叮,我是刑警寧澤胧砰,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站苇瓣,受9級(jí)特大地震影響尉间,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一哲嘲、第九天 我趴在偏房一處隱蔽的房頂上張望贪薪。 院中可真熱鬧,春花似錦眠副、人聲如沸画切。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)霍弹。三九已至,卻和暖如春娃弓,著一層夾襖步出監(jiān)牢的瞬間典格,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工台丛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留耍缴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓挽霉,卻偏偏與公主長(zhǎng)得像防嗡,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侠坎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 因?yàn)楣ぷ餍枨蟊久约喝チ私庖幌耡op并做下的記錄,當(dāng)然大部分都是參考他人博客以及官方文檔硅蹦。 目錄 [關(guān)于 AOP](...
    forip閱讀 2,278評(píng)論 1 20
  • 基本知識(shí) 其實(shí), 接觸了這么久的 AOP, 我感覺, AOP 給人難以理解的一個(gè)關(guān)鍵點(diǎn)是它的概念比較多, 而且坑爹...
    永順閱讀 8,231評(píng)論 5 114
  • 本章內(nèi)容: 面向切面編程的基本原理 通過POJO創(chuàng)建切面 使用@AspectJ注解 為AspectJ切面注入依賴 ...
    謝隨安閱讀 3,157評(píng)論 0 9
  • 一、簡(jiǎn)述 1闷煤、AOP的概念 如果你用java做過后臺(tái)開發(fā)童芹,那么你一定知道AOP這個(gè)概念。如果不知道也無妨鲤拿,套用百度...
    GitLqr閱讀 4,210評(píng)論 6 25
  • test
    wolfsecond閱讀 82評(píng)論 0 1