溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在Spring Boot框架中使用AOP的正確姿勢

發布時間:2020-09-13 20:43:37 來源:腳本之家 閱讀:135 作者:餓了么物流技術團隊 欄目:編程語言

前言

Spring Boot是基于Spring的用來開發Web應用的框架,功能與Spring MVC有點類似,但是Spring Boot的一大特點就是需要的配置非常少。Spring Boot推薦convention over configuration,也就是約定大于配置,因此Spring Boot會幫你做許多自動的配置,并且Spring Boot使用的是Java Config,幾乎可以做到零XML文件配置。

假設現在有這樣一種場景,需要統計某個接口的處理耗時,我們可以使用AOP來實現,AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。在Spring Boot中使用AOP也非常簡單,只需要一點簡單的配置即可。

需要使用AOP的類

@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";
 }
}

這是一個使用@RestController注解的Controller類,這個類會去下載一些XML文件,然后壓縮,最后刪除下載的XML文件?,F在我們要統計整個處理過程的耗時,使用AOP來實現。在download上使用了一個@Timer注解,這是一個自定義的普通注解,用來標記這個方法作為一個切點。

Aspect類

@Aspect
@Component
public class VipAspect {

 private static final Logger logger = LoggerFactory.getLogger(VipAspect.class);

 private long start;

 //定義切點
 @Pointcut("@annotation(cn.magicwindow.mlink.content.annotation.Timer)")
 public void timer(){}

 //在方法執行前執行
 @Before("timer()")
 public void before() {
  start = System.currentTimeMillis();
 }

 //在方法執行后執行
 @After("timer()")
 public void after() {
  long now = System.currentTimeMillis();
  logger.info("job took time {}s in summary", (now - start) / 1000);
 }
}

這里使用了注解來標記切點,也可以直接按照方法名稱來定義,具體的使用方法可以參考官方文檔。

配置Spring Boot支持AOP

@Configuration
@EnableAspectJAutoProxy
public class Config {
}

只需要使用@EnableAspectJAutoProxy注解開啟Spring Boot的AOP支持即可。

最后,在調用download方法之后就會打印出本次處理的用時。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女