您好,登錄后才能下訂單哦!
Springboot怎樣使用Aspectj實(shí)現(xiàn)AOP面向切面編程,相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
需在 IOC 容器中將切面聲明為 Bean 實(shí)例 即加入@Component 注解;當(dāng)在 Spring IOC 容器中初始化 AspectJ 切面之后, Spring IOC 容器就會為那些與 AspectJ 切面相匹配的 Bean 創(chuàng)建代理.
在 AspectJ 注解中, 切面只是一個(gè)帶有 @Aspect 注解的 Java 類.
網(wǎng)上都是說springboot使用Aspectj做面向切面編程的時(shí)候,只需要引入下面jar包依賴即可
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
但是我去編寫的時(shí)候,單單引入 spring-boot-starter-aop 的jar依賴的時(shí)候,像@Component、@Aspect等這些註解都不能使用,後來發(fā)現(xiàn)缺少aspectjweaver 這么個(gè)jar包,最后引入了下面的jar才解決問題
<dependency> <groupId>aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.5.3</version> </dependency>
spring.aop.auto=true這個(gè)配置,才能開啟Aspectj注解的掃面,但是我去查詢了springboot全局配置文件,里面默認(rèn)配置為true(spring.aop.auto=true # Add @EnableAspectJAutoProxy),所以我沒有去做添加,功能沒有問題,切面能正常實(shí)現(xiàn)。
1)@Before
: 前置通知:在方法執(zhí)行之前執(zhí)行的通知
2)@After
: 后置通知, 在方法執(zhí)行之后執(zhí)行 , 即方法返回結(jié)果或者拋出異常的時(shí)候, 下面的后置通知記錄了方法的終止.
3)@AfterRunning
: 返回通知, 在方法返回結(jié)果之后執(zhí)行
ps:無論方法是正常返回還是拋出異常, 后置通知都會執(zhí)行. 如果只想在方法返回的時(shí)候記錄日志, 應(yīng)使用返回通知代替后置通知.
4)@AfterThrowing
: 異常通知, 在方法拋出異常之后
5) @Around
: 環(huán)繞通知, 圍繞著方法執(zhí)行(即方法前后都有執(zhí)行)
環(huán)繞通知是所有通知類型中功能最為強(qiáng)大的, 能夠全面地控制連接點(diǎn). 甚至可以控制是否執(zhí)行連接點(diǎn).
/* 標(biāo)識這個(gè)方法是個(gè)前置通知, 切點(diǎn)表達(dá)式表示執(zhí)行任意類的任意方法. 第一個(gè) * 代表匹配任意修飾符及任意返回值, 第二個(gè) * 代表任意類的對象, 第三個(gè) * 代表任意方法, 參數(shù)列表中的 .. 匹配任意數(shù)量的參數(shù) */ //@Before: 前置通知 @Before("execution (* com.lc.project..controller..*.*(..))") public void beforeMethod(JoinPoint joinPoint){ String methodName = joinPoint.getSignature().toString(); Object result= Arrays.asList(joinPoint.getArgs()); System.out.println("The method name:"+methodName+"--value:"+result); } //@After: 后置通知 @After("execution (* *.*(..))") public void afterMethod(JoinPoint joinPoint){ String methodName = joinPoint.getSignature().getName(); System.out.println("The method name:"+methodName+ " ends"); } //@AfterRunning: 返回通知 @AfterReturning(value="execution (* *.*(..))",returning="result") public void afterReturningMethod(JoinPoint joinPoint,Object result){ String methodName = joinPoint.getSignature().getName(); System.out.println("The method name:"+methodName+ " ends and result="+result); } //@AfterThrowing: 異常通知 @AfterThrowing(value="execution (* *.*(..))",throwing="e") public void afterReturningMethod(JoinPoint joinPoint,Exception e){ String methodName = joinPoint.getSignature().getName(); System.out.println("The method name:"+methodName+ " ends and result="+e); }
看完上述內(nèi)容,你們掌握Springboot怎樣使用Aspectj實(shí)現(xiàn)AOP面向切面編程的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。