在寫日志模塊之前撒遣,突然想起前面還有這個aop。現(xiàn)在這節(jié)要做的管跺,是基于切面來打日志义黎,捕捉/處理異常。
準(zhǔn)備
- 引入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
在引入依賴后豁跑,其實已經(jīng)是什么都不用干了廉涕,因為引入依賴后,springBoot為什么自動開啟了spring.aop.auto=true
選項,它相當(dāng)于已經(jīng)啟用了@EnableAspectJAutoProxy這個注解艇拍。
在application.properties中狐蜕,點進spring.aop.auto=true
選項
我們還發(fā)現(xiàn),這個spring.aop.proxy-target-class
選項,默認為false,看它的描述的意思是卸夕,默認為false,是采用標(biāo)準(zhǔn)Java實現(xiàn),如果是true层释,就采用cglib,顧application.properties中,配置如下:
#Aop Config
#spring.aop.auto這個可以不寫,因為引入依賴后娇哆,默認是開啟的
spring.aop.auto=true
spring.aop.proxy-target-class=true
剩下的就是Spring-AOP的事情了,別無二樣
關(guān)于aop的切入語法,可以看【第六章】 AOP 之 6.5 AspectJ切入點語法詳解 ——跟我學(xué)spring3
關(guān)于aop的注解,雖然SpringBoot略有不同碍讨,也可以看【第六章】 AOP 之 6.4 基于@AspectJ的AOP ——跟我學(xué)spring3
- 基本詞匯解析
- ProceedingJoinPoint
切入點治力,JoinPoint的子類,專用于環(huán)繞切面勃黍,切入點可以獲取攔截到的傳入?yún)?shù)宵统,使用getArgs()即可獲得參數(shù)數(shù)組; proceed(),是用來執(zhí)行目標(biāo)方法的,例如我攔截了mapper的insert()方法覆获,如果執(zhí)行了pj.proceed()马澈,即執(zhí)行mapper.nsert()
- ProceedingJoinPoint
aop的核心其實就是代理模式 如何讓孩子愛上設(shè)計模式 ——13.代理模式(Proxy Pattern)