作者簡介
彬哥,目前任職於餓了麼,從事餓了麼物流側核心系統的開發工作,喜愛鑽研各種技術,用技術解決實際問題。
Spring Boot是基於Spring的用來開發Web應用的框架,功能與Spring MVC有點類似,但是Spring Boot的一大特點就是需要的配置非常少。Spring Boot推薦convention over configuration
,也就是約定大於配置,因此Spring Boot會幫你做許多自動的配置,並且Spring Boot使用的是Java Config,幾乎可以做到零XML檔案配置。
假設現在有這樣一種場景,需要統計某個介面的處理耗時,我們可以使用AOP來實現,在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檔案。現在我們要統計整個處理過程的耗時,使用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
方法之後就會列印出本次處理的用時。
閱讀部落格還不過癮?
歡迎大家掃二維碼加入交流群,討論和部落格有關的技術問題,還可以和博主有更多互動
部落格轉載、線下活動及合作等問題請郵件至 shadowfly_zyl@hotmail.com 進行溝通