Spring學(xué)習(xí)--Spring中如何使用AOP進(jìn)行切面編程
AOP即面向切面編程,它可以看作是代碼的一個(gè)"橫向"入口,比如某個(gè)特定異常拋出的地方或者所有某個(gè)注解標(biāo)注的方法等。通過(guò)AOP,我們可以在這些特定的入口織入額外的邏輯,進(jìn)行功能增強(qiáng),例如日志記錄和權(quán)限控
AOP即面向切面編程,它可以看作是代碼的一個(gè)"橫向"入口,比如某個(gè)特定異常拋出的地方或者所有某個(gè)注解標(biāo)注的方法等。通過(guò)AOP,我們可以在這些特定的入口織入額外的邏輯,進(jìn)行功能增強(qiáng),例如日志記錄和權(quán)限控制等。本文將演示如何使用AOP進(jìn)行切面編程案例,具體實(shí)現(xiàn)的功能是統(tǒng)計(jì)某個(gè)包下所有類的所有方法執(zhí)行所消耗的時(shí)間。
基于Spring Boot構(gòu)建應(yīng)用框架
Spring Boot提供了一個(gè)快速使用Spring進(jìn)行開(kāi)發(fā)的框架,我們可以基于Spring Initializr構(gòu)建一個(gè)基于Spring Boot的應(yīng)用框架。在依賴部分,只需要選擇lombok依賴(用于簡(jiǎn)化代碼開(kāi)發(fā))即可。
導(dǎo)入項(xiàng)目并添加依賴
將工程導(dǎo)入到Eclipse中,然后手動(dòng)在pom.xml文件中增加以下依賴:
```xml
```
編寫(xiě)切面類,并定義切入點(diǎn)和增強(qiáng)邏輯
切面類需要使用注解@Aspect和@Component進(jìn)行標(biāo)注。為了方便進(jìn)行日志記錄,我們還添加了lombok的@Slf4j注解。通過(guò)注解@PointCut定義切入點(diǎn),因?yàn)槲覀兊脑鰪?qiáng)邏輯是統(tǒng)計(jì)所有方法的執(zhí)行時(shí)間,所以通過(guò)使用注解@Around來(lái)在切入點(diǎn)織入環(huán)繞增強(qiáng)邏輯。另外,AOP還支持@Before(方法執(zhí)行前織入邏輯)和@After(方法執(zhí)行后織入邏輯)等。
定義業(yè)務(wù)測(cè)試類
我們定義兩個(gè)業(yè)務(wù)測(cè)試類,并且確保它們位于切入點(diǎn)所指定的包下。同時(shí),通過(guò)@Component注解將它們加入到Spring bean容器進(jìn)行管理。
在這兩個(gè)業(yè)務(wù)類中,我們讓線程暫停一段時(shí)間,模擬業(yè)務(wù)執(zhí)行耗時(shí)。
啟動(dòng)類中進(jìn)行測(cè)試
在啟動(dòng)類中,我們編寫(xiě)代碼進(jìn)行測(cè)試。首先,實(shí)現(xiàn)CommandLineRunner接口,并在其run方法中調(diào)用注入的業(yè)務(wù)類對(duì)象的方法。觀察控制臺(tái)的輸出,通過(guò)輸出可以看出,我們織入的統(tǒng)計(jì)業(yè)務(wù)方法執(zhí)行所耗費(fèi)時(shí)間的邏輯已經(jīng)運(yùn)行,并輸出了相關(guān)數(shù)據(jù)。
通過(guò)以上步驟,我們成功地使用AOP進(jìn)行了切面編程,實(shí)現(xiàn)了統(tǒng)計(jì)某個(gè)包下所有類的所有方法執(zhí)行所消耗的時(shí)間的功能。