AOP編程的基本概念與idea編輯器的配合體驗(yàn)過程
初始化一個(gè)基礎(chǔ)的 AOP 程序
// 作為演示程序,沒有更具體的方法體 @Slf4j @Component @Aspect public class TryAspect { @Before("execution(* biz.baijing.service.impl.DeptServiceImpl.*(..))") // * 任意方法 , .. 形參任意 public void before(){ log.info("Before ..."); } public void after(){ log.info("After ..."); } public void around(){ log.info("Around before ..."); // 調(diào)用目標(biāo)方法 log.info("around after"); } public void afterReturning(){ log.info("AfterReturning ..."); } public void afterThrowing(){ log.info("After Throwing ..."); } }
Before
注意編輯器這個(gè)位置的 m 的變化。
點(diǎn)擊 m 提示了
@Before("execution(* biz.baijing.service.impl.DeptServiceImpl.*(..))")
切面目標(biāo)的方法。
Around
before 是半圓;around 是完整的圓形。
同樣點(diǎn)擊會(huì)出現(xiàn) execution 的指向的目標(biāo)方法
注解: m = methods
對(duì) around 方法,完善之后
@Around("execution(* biz.baijing.service.impl.DeptServiceImpl.*(..))") public Object around(ProceedingJoinPoint proceedingjoinPoint) throws Throwable{ log.info("Around before ..."); // 調(diào)用目標(biāo)方法 Object proceed = proceedingjoinPoint.proceed(); log.info("around after"); return proceed; }
Advise — 通知
方法體,是抽取的一組公共的實(shí)現(xiàn)邏輯。
log.info("Around before ..."); // 調(diào)用目標(biāo)方法 Object proceed = proceedingjoinPoint.proceed(); log.info("around after"); return proceed;
PointCut — 切入點(diǎn)
方法實(shí)際針對(duì)的目標(biāo)方法的引入,是AOP方法和目標(biāo)類方法的連接;
通過切入點(diǎn)表達(dá)式關(guān)聯(lián)。
"execution(* biz.baijing.service.impl.DeptServiceImpl.*(..))"
備注: * : 所有 DeptServiceImpl 下的方法 ; .. : 形參任意。
Acpect — 切面
advise 和 pointcut 的連接。
@Around("execution(* biz.baijing.service.impl.DeptServiceImpl.*(..))") public Object around(ProceedingJoinPoint proceedingjoinPoint) throws Throwable{ log.info("Around before ..."); // 調(diào)用目標(biāo)方法 Object proceed = proceedingjoinPoint.proceed(); log.info("around after"); return proceed; }
描述這個(gè)方法的類,就叫: 切面類。
@Slf4j @Component @Aspect public class TryAspect { @Before("execution(* biz.baijing.service.impl.DeptServiceImpl.*(..))") // * 任意方法 , .. 形參任意 public void before(){ log.info("Before ..."); } public void after(){ log.info("After ..."); } @Around("execution(* biz.baijing.service.impl.DeptServiceImpl.*(..))") public Object around(ProceedingJoinPoint proceedingjoinPoint) throws Throwable{ log.info("Around before ..."); // 調(diào)用目標(biāo)方法 Object proceed = proceedingjoinPoint.proceed(); log.info("around after"); return proceed; } public void afterReturning(){ log.info("AfterReturning ..."); } public void afterThrowing(){ log.info("After Throwing ..."); } }
TryAspect —— 切面類。
Target — 目標(biāo)對(duì)象
biz.baijing.service.impl.DeptServiceImpl
DeptServiceImpl —— 就是目標(biāo)對(duì)象。
JoinPoint — 連接點(diǎn)
被 AOP 控制的對(duì)象方法,即:
biz.baijing.service.impl.DeptServiceImpl
下的所有方法
這里被 紅色 m 標(biāo)識(shí)的方法就是 JoinPoint 。
結(jié)果
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決SpringBoot啟動(dòng)報(bào)錯(cuò):Failed?to?load?property?source?from?l
這篇文章主要介紹了解決SpringBoot啟動(dòng)報(bào)錯(cuò):Failed?to?load?property?source?from?location?'classpath:/application.yml'問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04spring-boot整合dubbo:Spring-boot-dubbo-starter
這篇文章主要介紹了spring-boot整合dubbo:Spring-boot-dubbo-starter的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05springboot2 生產(chǎn)部署注意事項(xiàng)及示例代碼
這篇文章主要介紹了springboot2 生產(chǎn)部署注意事項(xiàng)及示例代碼,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04Java算法之最長(zhǎng)公共子序列問題(LCS)實(shí)例分析
這篇文章主要介紹了Java算法之最長(zhǎng)公共子序列問題(LCS),結(jié)合實(shí)例形式分析了最長(zhǎng)公共子序列的原理及問題解決方法,需要的朋友可以參考下2017-11-11SpringBoot @Import與@Conditional注解使用詳解
在了解spring boot自動(dòng)配置原理前,再來了解下兩個(gè)注解@Import注解和@Conditional注解,@Conditional是Spring4新提供的注解,它的作用是按照一定的條件進(jìn)行判斷,滿足條件給容器注冊(cè)bean2022-10-10java實(shí)現(xiàn)批量導(dǎo)入.csv文件到mysql數(shù)據(jù)庫
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)批量導(dǎo)入.csv文件到mysql數(shù)據(jù)庫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08