說(shuō)明:本文首發(fā)于微信公眾號(hào)并同步至個(gè)人博客 http://www.fengzheng.pub/archives/277.html,轉(zhuǎn)載請(qǐng)注明來(lái)源。
AOP 是什么東西
首先來(lái)說(shuō) AOP 并不是 Spring 框架的核心技術(shù)之一,AOP 全稱 Aspect Orient Programming,即面向切面的編程。其要解決的問(wèn)題就是在不改變?cè)创a的情況下,實(shí)現(xiàn)對(duì)邏輯功能的修改。常用的場(chǎng)景包括記錄日志、異常處理、性能監(jiān)控、安全控制(例如攔截器)等,總結(jié)起來(lái)就是,凡是想對(duì)當(dāng)前功能做變更,但是又不想修改源代碼的情況下,都可以考慮是否可以用 AOP 實(shí)現(xiàn)。
為什么要面向切面呢,我直接改源代碼不是很好嗎?當(dāng)然沒(méi)有問(wèn)題,如果情況允許。但是考慮到下面這些情況,我本來(lái)寫好了1000個(gè)方法,有一天,我想加入一些控制,我想在執(zhí)行方法邏輯之前,檢查一些系統(tǒng)參數(shù),參數(shù)檢查沒(méi)問(wèn)題再執(zhí)行邏輯,否則不執(zhí)行。這種情況怎么辦呢,難道要修改這1000個(gè)方法嗎,那簡(jiǎn)直就是災(zāi)難。還有,有些線上邏輯執(zhí)行緩慢,但我又不想重新部署環(huán)境,因?yàn)槟菢訒?huì)影響線上業(yè)務(wù),這種情況下,也可以考慮 AOP 方式,Btrace 就是這樣一個(gè)線上性能排查的神器。
Spring AOP 的用法
面向切面編程,名字好像很炫酷,但是使用方式已經(jīng)被 Spring 封裝的非常簡(jiǎn)單,只需要簡(jiǎn)單的配置即可實(shí)現(xiàn)。使用方式不是本文介紹的重點(diǎn),下面僅演示最簡(jiǎn)單最基礎(chǔ)的使用,實(shí)現(xiàn)對(duì)調(diào)用的方法進(jìn)行耗時(shí)計(jì)算,并打印出來(lái)。
環(huán)境說(shuō)明: JDK 1.8 ,Spring mvc 版本 4.3.2.RELEASE
1. 首先引用 Spring mvc 相關(guān)的 maven 包,太多了,就不列了,只列出 Spr