前言
spring boot是基于spring的用來開發(fā)web應(yīng)用的框架,功能與spring mvc有點(diǎn)類似,但是spring boot的一大特點(diǎn)就是需要的配置非常少。spring boot推薦convention over configuration,也就是約定大于配置,因此spring boot會(huì)幫你做許多自動(dòng)的配置,并且spring boot使用的是java config,幾乎可以做到零xml文件配置。
假設(shè)現(xiàn)在有這樣一種場景,需要統(tǒng)計(jì)某個(gè)接口的處理耗時(shí),我們可以使用aop來實(shí)現(xiàn),aop為aspect oriented programming的縮寫,意為:面向切面編程,通過預(yù)編譯方式和運(yùn)行期動(dòng)態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)。在spring boot中使用aop也非常簡單,只需要一點(diǎn)簡單的配置即可。
需要使用aop的類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
@restcontroller public class downloadcontroller { @autowired private xmldownloadservice downloadservice; @autowired private xmlfileclearservice clearservice; @requestmapping ( "/download" ) @timer public string download() throws exception { downloadservice.download(); clearservice.compress(); clearservice.clearall(); return "ok" ; } } |
這是一個(gè)使用@restcontroller注解的controller類,這個(gè)類會(huì)去下載一些xml文件,然后壓縮,最后刪除下載的xml文件。現(xiàn)在我們要統(tǒng)計(jì)整個(gè)處理過程的耗時(shí),使用aop來實(shí)現(xiàn)。在download上使用了一個(gè)@timer注解,這是一個(gè)自定義的普通注解,用來標(biāo)記這個(gè)方法作為一個(gè)切點(diǎn)。
aspect類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
@aspect @component public class vipaspect { private static final logger logger = loggerfactory.getlogger(vipaspect. class ); private long start; //定義切點(diǎn) @pointcut ( "@annotation(cn.magicwindow.mlink.content.annotation.timer)" ) public void timer(){} //在方法執(zhí)行前執(zhí)行 @before ( "timer()" ) public void before() { start = system.currenttimemillis(); } //在方法執(zhí)行后執(zhí)行 @after ( "timer()" ) public void after() { long now = system.currenttimemillis(); logger.info( "job took time {}s in summary" , (now - start) / 1000 ); } } |
這里使用了注解來標(biāo)記切點(diǎn),也可以直接按照方法名稱來定義,具體的使用方法可以參考官方文檔。
配置spring boot支持aop
1
2
3
4
|
@configuration @enableaspectjautoproxy public class config { } |
只需要使用@enableaspectjautoproxy注解開啟spring boot的aop支持即可。
最后,在調(diào)用download方法之后就會(huì)打印出本次處理的用時(shí)。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對服務(wù)器之家的支持。
原文鏈接:https://juejin.im/post/5b67b8a5f265da0f742f07f1