有天上飛的概念,就要有落地的實現java
- 概念+代碼實現是本文的特色,教程將涵蓋完整的圖文教程,代碼案例
- 文章結尾配套自測面試題,學完技術自我測試更紮實
- 概念十遍不如代碼一遍,朋友,但願你把文中全部的代碼案例都敲一遍
大哥大姐新年好,點贊轉發不要少git
SpringBoot 圖文系列教程技術大綱面試
SpringBoot 圖文教程系列文章目錄redis
在Spring中,無論是學習仍是面試,有兩個點是永遠繞不過去的,一個是IOC,另外一個就是Aop,Spring中使用Aop是很是簡單的,能夠經過xml和註解兩種方式寫出aop的代碼,那麼在SpringBoot中有什麼變化嗎?spring
在SpringBoot中使用aop實際上沒有太多的變化,關於SpringBoot實際上就是對Spring和SpringMVC的進一步封裝,所以在 SpringBoot 中一樣支持Spring框架中AOP切面編程,不過在SpringBoot中爲了快速開發僅僅提供了註解方式的切面編程。編程
本文全部的內容,將會在下面的demo上進行操做。 請去Git倉庫下載: https://gitee.com/bingqilinpeishenme/Lu-JavaNodes
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
/** @Aspect 用來類上,表明這個類是一個切面 @Before 用在方法上表明這個方法是一個前置通知方法 @After 用在方法上表明這個方法是一個後置通知方法 @Around 用在方法上表明這個方法是一個環繞的方法 @Around 用在方法上表明這個方法是一個環繞的方法 @order(數字)用在類上,數字越小進入越早 **/ /** 環繞,前置,後置所有存在 先進入環繞,在進入前置,離開前置,離開環繞,進入後置,離開後置 **/
/** * @Aspect 用來類上,表明這個類是一個切面 * @Component 用來告訴SpringBoot 給當前類建立對象 等價於@Service */ @Aspect @Component public class MyAspect { //@Before 用在方法上表明這個方法是一個前置通知方法 註解的參數是切點表達式 @Before("execution(* com.lu.service.*.*(..))") public void before(JoinPoint joinPoint){ System.out.println("前置通知"); //JoinPoint 經過該對象能夠獲取到被切入的對象的信息 joinPoint.getTarget();//目標對象 joinPoint.getSignature();//方法簽名 joinPoint.getArgs();//方法參數 } }
@Aspect @Component public class MyAspect { @After("execution(* com.lu.service.*.*(..))") public void before(JoinPoint joinPoint){ System.out.println("後置通知"); joinPoint.getTarget();//目標對象 joinPoint.getSignature();//方法簽名 joinPoint.getArgs();//方法參數 } }
注意: 前置通知和後置通知都沒有返回值,方法參數都爲joinpoint
@Aspect @Component public class MyAspect { @Around("execution(* com.lu.service.*.*(..))") public Object before(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { System.out.println("進入環繞通知"); proceedingJoinPoint.getTarget();//目標對象 proceedingJoinPoint.getSignature();//方法簽名 proceedingJoinPoint.getArgs();//方法參數 Object proceed = proceedingJoinPoint.proceed();//放行執行目標方法 這一步必須存在 System.out.println("目標方法執行以後回到環繞通知"); return proceed;//返回目標方法返回值 } }
注意: 環繞通知存在返回值,參數爲ProceedingJoinPoint緩存
- 若是不執行放行,不會執行目標方法
- 一旦放行必須將目標方法的返回值返回,不然調用者沒法接受返回數據
以上就是SpringBoot中aop的簡單使用,今天實際上只是簡單的測試了aop的Api,關於aop的應用,例如:經過Aop記錄日誌信息,經過Aop操做redis緩存等實戰應用,會在後續文章中寫出。框架
恭喜你完成了本章的學習,爲你鼓掌!若是本文對你有幫助,請幫忙點贊,評論,轉發,這對做者很重要,謝謝。spring-boot
讓咱們再次回顧本文的學習目標學習
- 掌握SpringBoot中aop的使用
要掌握SpringBoot更多的用法,請持續關注本系列教程。
下面體貼的我給朋友萌還準備了一些 自測面試題和項目案例,但願你可以成熱打鐵,將知識夯紮實。
見面試題集錦 https://gitee.com/bingqilinpeishenme/Lu-JavaNodes
見碼雲倉庫 https://gitee.com/bingqilinpeishenme/Lu-JavaNodes
本次需求:
練習文中demo
歡迎關注本人公衆號:鹿老師的Java筆記,將在長期更新Java技術圖文教程和視頻教程,Java學習經驗,Java面試經驗以及Java實戰開發經驗。